MySQL基础及MySQL C API编程

一、MySQL For Windows安装:

1. 下载:

上官网下载即可:

http://www.mysql.com/downloads/

2. 安装:

没有什么好说的,傻瓜式,也没有什么要注意的。

3. 配置:

添加系统变量MYSQL_HOME和修改PATH,目的就是让系统默认能够找到MySQL命令。(安装目录的/bin下面)

PS:

补充一下,有的朋友可能下载的是免安装版本,拷贝到一个地方就可以了,这个时候,配置还是需要的,但是配置完成之后,需要手动安装MySQL服务。因为我们是想既要搭建MySQL服务器端,又要搭建MySQL客户端,服务器端是需要开启服务的,所以需要手动安装并启动mysql服务。还有就是要注意,网上的一些WAMP集成安装包,只包含了SQL web有关的工具,是不全的,需要安装200多M的那个版本。

相关的几个命令如下:

mysqld -install //安装mysql服务

mysqld -remove  //卸载mysql服务

net start mysql  //启动mysql服务

net stop mysql  //停止mysql服务

mysqladmin -version //查看mysql服务是否安装成功

也可以通过Windows的服务工具来配置MySQL。

二、MySQL基础:

1. 连接MySQL:

首先再明确一个概念,现在我们是在学习如何使用MySQL,我们的MySQL服务器端是安装在本机上,MySQL客户端也是安装在本机上的。我们登录MySQL就是通过CMD命令行工具,用客户端命令mysql登录到本机MySQL服务器端,本机开启的服务是MySQL,进程是mysql.exe。

安装完成之后,默认的Host和User是:

其中密码都为空。

我们有两种方式连接mysql服务器,不指定Host/User/Password默认就是按照localhost匿名用户的方式连接。

退出的mysql服务器使用命令exit或者quit。

mysql //localhost+匿名方式登录

mysql -u root -p //localhost+root+password方式登录

exit //退出mysql服务器

2. 修改mysql服务器用户密码:

mysqladmin -u root -p password //中间提示输入当前密码一次,新密码两次

3. MySQL基础语法:

1.创建数据库,名字为RUNOOB

mysqladmin -u root -p create RUNOOB

2.删除数据库,名字为RUNOOB

mysqladmin -u root -p drop RUNOOB

3.显示数据库:

mysql> show databases; //注意后面要加;号,表示一条mysql语句结束

4.选择数据库:

mysql> use RUNOOB;

5.数据类型:

http://www.runoob.com/mysql/mysql-data-types.html

6.显示当前数据库下的数据表:

mysql> show tables;

7.创建数据表:

mysql>CREATE TABLE runoob_tbl(->runoob_id INTNOTNULLAUTO_INCREMENT,->runoob_title VARCHAR(100)NOTNULL,->runoob_author VARCHAR(40)NOTNULL,->submission_dateDATE,->PRIMARY KEY ( runoob_id )->);

1

2

3

4

5

6

7

1

2

3

4

5

6

7

8.删除数据表:

mysql> DROP TABLE runoob_tbl

9.插入数据:

mysql> INSERT INTO runoob_tbl    ->(runoob_title, runoob_author, submission_date)->VALUES->("Learn PHP","John Poul",NOW());

1

2

3

4

1

2

3

4

10.查询数据表中的数据:

SELECT * from runoob_tbl

11.Show有关的语法:

SHOWDATABASES;//列出 MySQL Server上的数据库SHOWTABLES [FROMdb_name];//列出数据库中的表SHOWTABLESTATUS [FROMdb_name];//列出数据库的表信息,比较详细SHOWCOLUMNSFROMtbl_name [FROMdb_name];//列出表的列信息,同SHOWFIELDSFROMtbl_name [FROMdb_name],DESCRIBEtbl_name [col_name]SHOWFULLCOLUMNSFROMtbl_name [FROMdb_name];//列出表的列信息,比较详细,同SHOWFULLFIELDSFROMtbl_name [FROMdb_name]SHOWINDEXFROMtbl_name [FROMdb_name];//列出表的索引信息SHOWSTATUS;//列出 Server 的状态信息SHOWVARIABLES;//列出 MySQL 系参数值SHOWPROCESSLIST;//查看当前mysql查询进程SHOWGRANTSFORuser;//列出用户的授权命令

1

2

3

4

5

6

7

8

9

10

1

2

3

4

5

6

7

8

9

10

12.where子句:

mysql> SELECT * from runoob_tbl WHERE runoob_author='Sanjay'; //查询某一个符合条件的表项

13.update查询:

//查询并修改表中的一项,最后更新表格mysql>UPDATE runoob_tbl->SETrunoob_title='Learning JAVA'->WHERErunoob_id=3;

1

2

3

4

1

2

3

4

14.delete语句:

mysql> DELETE FROM runoob_tbl WHERE runoob_id=3; //删除表中的某一项

15.ALTER命令:

mysql> ALTERTABLEtestalter_tbl  DROP i;//删除以上表的 i 字段mysql> ALTERTABLEtestalter_tbl ADD i INT;//在表 testalter_tbl 中添加 i 字段,并定义数据类型mysql> ALTERTABLEtestalter_tbl MODIFY c CHAR(10);//把字段 c 的类型从 CHAR(1) 改为 CHAR(10)mysql> ALTERTABLEtestalter_tbl    -> MODIFY j BIGINT NOT NULL DEFAULT100;//指定字段 j 为 NOT NULL 且默认值为100mysql> ALTERTABLEtestalter_tbl ALTER iSETDEFAULT1000;//使用 ALTER 来修改字段的默认值mysql> ALTERTABLEtestalter_tbl ALTER i DROP DEFAULT;//使用 ALTER 命令及 DROP子句来删除字段的默认值mysql> ALTERTABLEtestalter_tbl RENAMETOalter_tbl;//修改表名

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

16.正则表达式:

正则表达式是通用的,和C、Linuxshell一样的。

mysql>SELECTnameFROMperson_tblWHEREname REGEXP'^st';//查找name字段中以'st'为开头的所有数据mysql>SELECTnameFROMperson_tblWHEREname REGEXP'ok$';//查找name字段中以'ok'为结尾的所有数据mysql>SELECTnameFROMperson_tblWHEREname REGEXP'mar';//查找name字段中包含'mar'字符串的所有数据mysql>SELECTnameFROMperson_tblWHEREname REGEXP'^[aeiou]|ok$';//查找name字段中以元音字符开头且以'ok'字符串结尾的所有数据

1

2

3

4

1

2

3

4

4. MySQL键和索引的概念:

http://www.runoob.com/mysql/mysql-index.html

http://blog.csdn.net/duck_arrow/article/details/8264686

http://www.jb51.net/article/34037.htm

三、MySQL C API编程:

实质就是C语言调用libmysql.lib库,使用其提供的的函数来连接,访问,修改MySQL数据库中的内容。

1. MYSQL结构体:

这个结构主要用于连接,保存一些连接的信息。

typedefstructst_mysql { NET          net;/* Communication parameters */gptr          connector_fd;/* ConnectorFd for SSL */char*host,*user,*passwd,*unix_socket,                *server_version,*host_info,*info,*db;unsignedintport,client_flag,server_capabilities;unsignedintprotocol_version;unsignedintfield_count;unsignedintserver_status;unsignedlongthread_id;/* Id for connection in server */my_ulonglong affected_rows; my_ulonglong insert_id;/* id if insert on table with NEXTNR */my_ulonglong extra_info;/* Used by mysqlshow */unsignedlongpacket_length;enummysql_status status; MYSQL_FIELD  *fields; MEM_ROOT      field_alloc; my_bool      free_me;/* If free in mysql_close */my_bool      reconnect;/* set to 1 if automatic reconnect */structst_mysql_options options;charscramble_buff[9];structcharset_info_st *charset;unsignedintserver_language;} MYSQL;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

2. MYSQL_RES结构体:

这个结构主要是返回一些操作数据库(SELECT, SHOW, DESCRIBE, EXPLAIN等)的结果,即“数据集”。

typedefstructst_mysql_res { my_ulonglong row_count;unsignedintfield_count, current_field; MYSQL_FIELD  *fields; MYSQL_DATA    *data; MYSQL_ROWS    *data_cursor; MEM_ROOT      field_alloc; MYSQL_ROW    row;/* If unbuffered read */MYSQL_ROW    current_row;/* buffer to current row */unsignedlong*lengths;/* column lengths of current row */MYSQL        *handle;/* for unbuffered reads */my_bool      eof;/* Used my mysql_fetch_row */} MYSQL_RES;

1

2

3

4

5

6

7

8

9

10

11

12

13

1

2

3

4

5

6

7

8

9

10

11

12

13

3. MySQL C API编程步骤:

具体有哪些函数,可以到网上搜索一下相关介绍,这里讲一下编程步骤:

(1)、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:

#include       // 进行网络编程需要winsock2.h

#include

#pragma comment(lib, "libmysql.lib")

(2)、创建MYSQL变量。如:

MYSQL mysql;

(3)、初始化MYSQL变量。

mysql_init(&mysql);

(4)、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:

MYSQL *  STDCALL mysql_real_connect(MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long clientflag);

参数说明:mysql--前面定义的MYSQL变量;host--MYSQL服务器的地址;user--登录用户名;passwd--登录密码;db--要连接的数据库;port--MYSQL服务器的TCP服务端口;unix_socket--unix连接方式,为NULL时表示不使用socket或管道机制;clientflag--Mysql运行为ODBC数据库的标记,一般取0。

连接失败时该函数返回0。

(5)、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:

int  STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);

参数说明:mysql--前面定义的MYSQL变量;q--SQL查询语句;length--查询语句的长度。

查询成功则该函数返回0。

(6)、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。

两个函数的原型分别为:

MYSQL_RES *    STDCALL mysql_store_result(MYSQL *mysql);

MYSQL_RES *    STDCALL mysql_use_result(MYSQL *mysql);

这两个函数分别代表了获取查询结果的两种方式。第一种,调用端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result。

(7)、调用mysql_fetch_row函数读取结果集数据。

上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

参数result就是mysql_store_result或mysql_use_result的返回值。

该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row[i]为第i个字段的值。当到结果集尾部时,此函数返回NULL。

(8)、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:

void  STDCALL mysql_free_result(MYSQL_RES *result);

(9)、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:

void STDCALL mysql_close(MYSQL *sock);

4. MySQL C API编程例子:

#if defined(_WIN32) || defined(_WIN64)//为了支持windows平台上的编译#include #endif#include #include #include "mysql.h"//我的机器上该文件在/usr/local/include/mysql下//定义数据库操作的宏,也可以不定义留着后面直接写进代码#define SELECT_QUERY "select username from tbb_user where userid = %d"intmain(intargc,char**argv)//char **argv 相当于 char *argv[]{    MYSQL mysql,*sock;//定义数据库连接的句柄,它被用于几乎所有的MySQL函数MYSQL_RES *res;//查询结果集,结构类型MYSQL_FIELD *fd ;//包含字段信息的结构MYSQL_ROW row ;//存放一行查询结果的字符串数组charqbuf[160];//存放查询sql语句字符串if(argc !=2) {//检查输入参数fprintf(stderr,"usage : mysql_select \n\n");exit(1);    }    mysql_init(&mysql);if(!(sock = mysql_real_connect(&mysql,"localhost","dbuser","dbpwd","9tmd_bbs_utf8",0,NULL,0))) {fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));        perror("");exit(1);    }sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));if(mysql_query(sock,qbuf)) {fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));exit(1);    }if(!(res=mysql_store_result(sock))) {fprintf(stderr,"Couldn't get result from %s\n", mysql_error(sock));exit(1);    }printf("number of fields returned: %d\n",mysql_num_fields(res));while(row = mysql_fetch_row(res)) {printf("Ther userid #%d 's username is: %s\n", atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0]))) ?"NULL": row[0])) ;puts("query ok !\n") ;    }    mysql_free_result(res);    mysql_close(sock);exit(0);return0;//. 为了兼容大部分的编译器加入此行}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

最后看一个例子,另一个网友VS2015 C连接MySQL的实现:

VS2015连接mySQL数据库

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,005评论 0 19
  • MySQL 数据库常用命令 1、MySQL常用命令 create database name; 创建数据库 use...
    55lover阅读 4,696评论 1 57
  • 1、MySQL启动和关闭(安装及配置请参照百度经验,这里不再记录。MySQL默认端口号:3306;默认数据类型格式...
    强壮de西兰花阅读 598评论 0 1
  • 咳嗽,空气中的尘埃,微小颗粒引起的肺部堵塞,特别是肺活量大时,肺部又热,更容易损伤,所以及时掸掉大颗粒尘埃,有助于...
    强子_fa09阅读 176评论 0 0
  • 生活中的10%是由发生在你身上的事情组成,而另外的90%则是由你对所发生的事情如何反应所决定。- -费斯汀格法则 ...
    阿甘的蜗牛屋阅读 639评论 0 1