SQL操作h和C语言使用SQL
一、基本操作
1.1 MySQL基本命令
连接MySQL服务器
在命令行下输入mysql –h localhost –u root –p
当显示“Enter password:”时,输入密码mysql查看MySQL中有哪些数据库
mysql> show databases; (注意SQL语句结尾的分号!)使用数据库mysql
mysql> use mysql;查看当前使用的数据库
mysql> select database();查看数据库mysql中有哪些关系
mysql> show tables;查看数据库mysql中关系的模式(以关系user为例)
mysql> describe user;使用help命令来了解其他命令和变量类型等的含义
mysql> help;
mysql> help use;使用SQL语言在数据库mysql上进行简单查询
mysql> select * from user;
mysql> select user, host, password from user;
mysql> select count() from user;
mysql> select count() as ucount from user;取消命令
若要取消一条正在编辑命令,键入\c并回车断开MySQL服务器连接
mysql> quit 或 mysql> exit
1.2使用SQL语言管理MySQL数据库
创建数据库menagerie
mysql> CREATE DATABASE menagerie;查看数据库menagerie是否创建成功
mysql> show databases;使用menagerie数据库
mysql> use menagerie;创建宠物信息关系pet,包含宠物名字、主人、种类、性别、出生和死亡日期
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);查看关系pet是否创建成功
mysql> show tables;查看关系pet的模式
mysql> describe pet;向关系pet中插入元组
mysql> INSERT INTO pet
-> VALUES (‘Puffball’,‘Diane’,‘hamster’,‘f’,‘1999-03-30’,NULL);从文件中批量导入数据
设D:\pet.txt是一个由字符Tab分隔的文本文件
Fluffy Harold cat f 1993-02-04 \N
Claws Gwen cat m 1994-03-17 \N
Buffy Harold dog f 1989-05-13 \N
Fang Benny dog m 1990-08-27 \N
Bowser Diane dog m 1998-08-31 1995-07-29
Chirpy Gwen bird f 1998-09-11 \N
Whistler Gwen bird \N 1997-12-09 \N
Slim Benny snake m 1996-04-29 \N
在MySQL提示符下执行
mysql> LOAD DATA LOCAL INFILE “D:\pet.txt” INTO TABLE pet;查询关系pet中所有元组
mysql> SELECT * FROM pet;更改关系pet中的数据
mysql> UPDATE pet SET birth = “1989-08-31” WHERE name = “Bowser”;查询名叫Bowser的宠物信息
mysql> SELECT * FROM pet WHERE name = “Bowser”;查询所有90后小猫和小狗的信息
mysql> SELECT * FROM pet WHERE birth >= “1990-1-1” AND
-> (species = “dog” OR species = “cat”);查询所有宠物的主人
mysql> SELECT owner FROM pet;
mysql> SELECT DISTINCT owner FROM pet;查询所有宠物的名字及生日,并按其年龄递增排序
mysql> SELECT name, birth FROM pet ORDER BY birth;查询所有宠物的名字及生日,并按其年龄递减排序
mysql> SELECT name, birth FROM pet ORDER BY birth DESC;查询所有宠物的名字、种类及生日,并先按种类名称递增排序,同种宠物按年龄递减排序
mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC;查询所有活着的宠物的信息
mysql> SELECT * FROM pet WHERE death IS NULL;查询关系pet中有多少只宠物
mysql> SELECT COUNT(*) FROM pet;查询每个主人有多少只宠物
mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;查询每种宠物的数量
mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;查询雄狗和雌狗的数量
mysql> SELECT species, sex, COUNT(*) FROM pet
-> WHERE species = “dog” GROUP BY species, sex;查询每种宠物的最大年龄
mysql> SELECT species, MAX(birth) FROM pet GROUP BY species;
二、配置和启动
- 配置
在环境变量中path中添加C:\ Program Files\MySQL\ MySQL Server 8.0\bin - 启动
搜索cmd
管理员身份打开
net start mysql
mysql -u root -p123456 //123456为密码
三、SQL和C语言
1.codeblocks 设置
最后,添加需要的库文件%MySQL安装路径%/lib/下的库文件libmysql.lib和mysqlclient.lib
2. 连接、断开MySQL服务器
在程序中必须加入#define _LCC_,以避免在Windows操作系统下进行编译时产生的错误。然后,在程序中加入#include <mysql.h>,让编译器能够找到所有MySQL Client的函数定义。
随后,使用mysql_init函数准备连接,mysql_init函数的声明为
MYSQL *mysql_init(MYSQL *mysql);
其参数和返回值均为类型为MYSQL的结构体的指针。MYSQL结构体是连接MySQL服务器的句柄,每一个句柄代表程序与MySQL 服务器唯一的连接,所有insert,select,delete等操作都需要MySQL句柄作为参数以识别不同用户、数据库以及程序。若mysql_init操作成功,则返回刚刚初始化的句柄;否则,返回NULL。
下面是一个简单的例子。
#ifndef __LCC__
#define __LCC__
#endif#include <stdio.h>
#include <mysql.h>int main(int argc, char **argv)
{MYSQL mysql_conn; /* Connection handle */if (mysql_init(&mysql_conn) != NULL)
{printf("Init succeeds!\n");}
else
{printf("Init fails!\n");}return 0;
}
编译并运行该程序,若句柄初始化成功,则打印”Init succeeds!”;否则,打印”Init fails!”。
在句柄被初始化后,就可以使用mysql_real_connect函数或者mysql_connect函数连接MySQL 服务器了,这两个函数的声明如下:
MYSQL *mysql_real_connect(
MYSQL *mysql, const char *host, const char *user,
const char *passwd, const char *db, unsigned int port,
const char *socket, unsigned long client_flag);
其中,第1个参数是MySQL句柄,第2至第4个参数分別为host name、user name及password,第5个参数是待使用的数据库的名字,你也可把第5个参数设为NULL,之后使用mysql_select_db函数来选择数据库,第6个参数是MySQL 服务器的连接池,通常把它设为MYSQL_PORT,第7个参数是MySQL 服务器及client之间传输的渠道(socket或named pipe),但MySQL 服务器会根据host name建立另一渠道,除非你有真的需要,否则你需在第7个参数填上NULL。最后是client_flag,包括压缩协议、查询协议、加密协议等。
与MySQL服务器的连接成功后,使用mysql_close函数断开连接,其函数声明为:
int mysql_close(MYSQL*);
下面是一个简单的例子:
#ifndef __LCC__
#define __LCC__
#endif#include <stdio.h>
#include <mysql.h>int main(int argc, char **argv) {MYSQL mysql_conn; /* Connection handle */if (mysql_init(&mysql_conn) != NULL) {if (mysql_real_connect(
&mysql_conn, "localhost", "root",
123456, "company", MYSQL_PORT,
NULL, 0) != NULL)printf("GOOD!\n");elseprintf("Connection fails.\n");} else {printf("Initialization fails.\n");return -1;}mysql_close(&mysql_conn);return 0;
}
至此,我们学会了如何连接、断开MySQL服务器。
3.查询MySQL数据库
在成功连接MySQL 服务器后,便可以使用mysql_query函数查询数据库。mysql_query函数的声明如下:
int mysql_query(MYSQL *mysql, const char *query);
第1个参数是MySQL连接的句柄,第2个参数是SQL语句。如果查询成功,mysql_query返回0,否则返回非0。
如果你的查询语句不需要结果返回,例如DELETE、UPDAE、INSERT等,mysql_query被执行后便完成整个操作了;如果你要执行SELECT、SHOW、DESCRIBE等,在存取结果前,必须使用mysql_store_result函数建立查询结果的句柄。mysql_store_result的函数声明如下:
MYSQL_RES *mysql_store_result(MYSQL *mysql);
其输入参数为MySQL的连接句柄,其输出为MYSQL_RES结构体指针类型。MYSQL_RES结构体表示的是MySQL数据库传递回来的查询结果,但我们并不会直接读取MYSQL_RES的数据,而是使用MYSQL_ROW,也即是以行为单位读取数据。
例子如下所示:
#ifndef __LCC__
#define __LCC__
#endif#include <stdio.h>
#include <mysql.h>int main(int argc, char **argv) {MYSQL mysql_conn; /* Connection handle */MYSQL_RES *mysql_result;if (mysql_init(&mysql_conn) != NULL) {if (mysql_real_connect(
&mysql_conn, "localhost", "root",
NULL, "company", MYSQL_PORT,
NULL, 0) != NULL) {mysql_query(
&mysql_conn, "select * from table1");mysql_result = mysql_store_result(&mysql_conn);/* Free the result to release the heap memory*/mysql_free_result(mysql_result);} else {printf("Connection fails.\n");}} else {printf("Initialization fails.\n");return -1;}mysql_close(&mysql_conn);return 0;
}
请注意mysql_result是一个指针。因为mysql_store_result函数会自动分配内存存储查询结果,所以需要执行mysql_free_result(MYSQL_RES*)来释放内存。
4. 提取查询结构
在提取结果前必须使用上面介绍过的mysql_store_result函数为查询结果分配内存,然后使用mysql_fetch_row函数逐行提取数据。mysql_fetch_row函数的声明如下:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
其输入参数为查询结果句柄,输出的类型为MYSQL_ROW。MYSQL_ROW是一个数组结构,数组中每一个元素依次为该元组各个属性上的值。
结果的元组数可以用mysql_num_rows函数返回。mysql_num_rows函数的声明为
int mysql_num_rows(MYSQL_RES*);
其输入参数为查询结果句柄,输出结果为元组数量。
下面是一个简单的例子:
#ifndef __LCC__
#define __LCC__
#endif#include <stdio.h>
#include <malloc.h>
#include <mysql.h>int main(int argc, char **argv) {MYSQL mysql_conn; /* Connection handle */MYSQL_RES *mysql_result; /* Result handle */MYSQL_ROW mysql_row; /* Row data */int f1, f2, num_row, num_col;if (mysql_init(&mysql_conn) != NULL) {if (mysql_real_connect(
&mysql_conn, "localhost", "root",
NULL, "company", MYSQL_PORT, NULL, 0) != NULL){if (mysql_query(
&mysql_conn,
"select * from testtable limit 10") == 0) {mysql_result = mysql_store_result(&mysql_conn);num_row = mysql_num_rows(mysql_result);num_col = mysql_num_fields(mysql_result);for (f1 = 0; f1 < num_row; f1++) {mysql_row = mysql_fetch_row(mysql_result);for (f2 = 0; f2 < num_col; f2++)printf(
"[Row %d, Col %d] ==> [%s]\n",
f1+1, f2+1, mysql_row[f2]);}} elseprintf("Query fails\n");} else {int i = mysql_errno(&mysql_conn);const *s = mysql_error(&mysql_conn);printf("Connection fails(ERROR %d): %s\n", i, s);}} elseprintf("Initialization fails\n");mysql_free_result(mysql_result);mysql_close(&mysql_conn);return 0;
}
请注意如果数据库很大,而又没有用mysql_free_result函数释放内存的话,很容易发生内存溢出的问题。
SQL操作h和C语言使用SQL相关推荐
- mysql一些基本sql操作_MySql数据库的一些基本操作---------------SQL语法
MySql数据库是比较常用的关系型数据库,操作用的是sql语句,下面来说一说MySql的一些基本操作 MySql数据库是一种C/S型的模式,即客户端/服务器端,对应到具体应用上,便是bin目录下的my ...
- 一些比较有用的SQL操作,2011最新整理
一些比较有用的SQL操作,2011最新整理,SQL批量删除与批量插入,批量删除:wei yuan chuang DELETE FROM MyTable WHERE ID IN (1,2); 批量插入 ...
- flask 操作mysql的两种方式-sql操作
flask 操作mysql的两种方式-sql操作一.用常规的sql语句操作 # coding=utf-8 # model.pyimport MySQLdbdef get_conn():conn = M ...
- Spark15:Spark SQL:DataFrame常见算子操作、DataFrame的sql操作、RDD转换为DataFrame、load和save操作、SaveMode、内置函数
前面我们学习了Spark中的Spark core,离线数据计算,下面我们来学习一下Spark中的Spark SQL. 一.Spark SQL Spark SQL和我们之前讲Hive的时候说的hive ...
- r dataframe 转成向量_快速掌握R语言中类SQL数据库操作技巧
在数据分析中,往往会遇到各种复杂的数据处理操作:分组.排序.过滤.转置.填充.移动.合并.分裂.去重.找重.填充等操作.这时候R语言就是一个很好的选择:R可以高效地.优雅地解决数据处理操作.(本章节为 ...
- Hive基本SQL操作
Hive基本SQL操作 库的创建与删除 建库语句 删除库 修改 表的建删改查 建表语句的结构 表相关的SQL语句 建表语句 创建普通表 创建字段限制的表 创建hive表 create like语法 创 ...
- c 语言数据库.pdf,c语言连接sql数据库.pdf
连接到 SAMPLE 数据库,查询 LASTNAME 为 JOHNSON 的FIRSTNAME 信息. #include #include #include #include "util.h ...
- pandas.DataFrame的类SQL操作
前言 pandas的DataFrame是类似于一张表的结构,但是并没有像数据库表那样的SQL操作.虽然如此,它依然可以使用python语言的风格实现SQL中的所有操作. 文章较长,建议点击右侧目录定位 ...
- C语言连接SQL Server数据库并且完成一次简易操纵
本文旨在针对SQL完全小白的朋友,让其了解C语言连接SQL Server的方法,并且完成一个简易操纵(可以是写入/读出/增删查改).本文使用的是SQL Server 2019,安装教程可参考SqlSe ...
最新文章
- webpack从入门到精通(四)优化打包配置总结②
- 【Tool】sublime txt的使用
- tomcat依赖导入步骤_Tomcat长生不老之术——嵌入式
- eval() php,js-eval编码,js-eval解码
- 二叉树总结挺好的很好记忆
- 锐动SDK应用于行车记录仪
- 系统文件-- lsof
- python匿名函数调用_python中引用局部变量的匿名函数
- 计算机网络 DNS协议 FTP DHCP
- 一个人如果控制不住自己乱消费,等同于废物
- 牛客 2021年度训练联盟热身训练赛第二场 G题Plate Spinning
- C++_二维数组的动态申请内存3种方法
- vc830l 说明书_有了解vc830l万用表使用方法的吗?
- 用英语说计算机的优点1000,我的英语老师作文1000字
- RHEL8.x-RedHat-Podman
- jcp jsr_JCP选举结果:LJC和CloudBees赢得EC席位
- 基于深度学习的菠萝实时三维坐标定位项目
- Word中的字体大小(几号-几磅)
- 老板到底能不能,监控到电脑版微信聊天?
- 【Linux从无到有】进程的地址空间