MySQL基礎(chǔ)及MySQL C API編程

一、MySQL For Windows安裝:

1. 下載:

上官網(wǎng)下載即可:

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

2. 安裝:

沒有什么好說的,傻瓜式,也沒有什么要注意的。

3. 配置:

添加系統(tǒng)變量MYSQL_HOME和修改PATH,目的就是讓系統(tǒng)默認(rèn)能夠找到MySQL命令。(安裝目錄的/bin下面)

PS:

補(bǔ)充一下,有的朋友可能下載的是免安裝版本,拷貝到一個(gè)地方就可以了,這個(gè)時(shí)候,配置還是需要的,但是配置完成之后,需要手動(dòng)安裝MySQL服務(wù)。因?yàn)槲覀兪窍爰纫罱∕ySQL服務(wù)器端,又要搭建MySQL客戶端,服務(wù)器端是需要開啟服務(wù)的,所以需要手動(dòng)安裝并啟動(dòng)mysql服務(wù)。還有就是要注意,網(wǎng)上的一些WAMP集成安裝包,只包含了SQL web有關(guān)的工具,是不全的,需要安裝200多M的那個(gè)版本。

相關(guān)的幾個(gè)命令如下:

mysqld -install //安裝mysql服務(wù)

mysqld -remove? //卸載mysql服務(wù)

net start mysql? //啟動(dòng)mysql服務(wù)

net stop mysql? //停止mysql服務(wù)

mysqladmin -version //查看mysql服務(wù)是否安裝成功

也可以通過Windows的服務(wù)工具來配置MySQL。

二、MySQL基礎(chǔ):

1. 連接MySQL:

首先再明確一個(gè)概念,現(xiàn)在我們是在學(xué)習(xí)如何使用MySQL,我們的MySQL服務(wù)器端是安裝在本機(jī)上,MySQL客戶端也是安裝在本機(jī)上的。我們登錄MySQL就是通過CMD命令行工具,用客戶端命令mysql登錄到本機(jī)MySQL服務(wù)器端,本機(jī)開啟的服務(wù)是MySQL,進(jìn)程是mysql.exe。

安裝完成之后,默認(rèn)的Host和User是:

其中密碼都為空。

我們有兩種方式連接mysql服務(wù)器,不指定Host/User/Password默認(rèn)就是按照localhost匿名用戶的方式連接。

退出的mysql服務(wù)器使用命令exit或者quit。

mysql //localhost+匿名方式登錄

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

exit //退出mysql服務(wù)器

2. 修改mysql服務(wù)器用戶密碼:

mysqladmin -u root -p password //中間提示輸入當(dāng)前密碼一次,新密碼兩次

3. MySQL基礎(chǔ)語法:

1.創(chuàng)建數(shù)據(jù)庫,名字為RUNOOB

mysqladmin -u root -p create RUNOOB

2.刪除數(shù)據(jù)庫,名字為RUNOOB

mysqladmin -u root -p drop RUNOOB

3.顯示數(shù)據(jù)庫:

mysql> show databases; //注意后面要加;號(hào),表示一條mysql語句結(jié)束

4.選擇數(shù)據(jù)庫:

mysql> use RUNOOB;

5.數(shù)據(jù)類型:

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

6.顯示當(dāng)前數(shù)據(jù)庫下的數(shù)據(jù)表:

mysql> show tables;

7.創(chuàng)建數(shù)據(jù)表:

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.刪除數(shù)據(jù)表:

mysql> DROP TABLE runoob_tbl

9.插入數(shù)據(jù):

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.查詢數(shù)據(jù)表中的數(shù)據(jù):

SELECT * from runoob_tbl

11.Show有關(guān)的語法:

SHOWDATABASES;//列出 MySQL Server上的數(shù)據(jù)庫SHOWTABLES [FROMdb_name];//列出數(shù)據(jù)庫中的表SHOWTABLESTATUS [FROMdb_name];//列出數(shù)據(jù)庫的表信息,比較詳細(xì)SHOWCOLUMNSFROMtbl_name [FROMdb_name];//列出表的列信息,同SHOWFIELDSFROMtbl_name [FROMdb_name],DESCRIBEtbl_name [col_name]SHOWFULLCOLUMNSFROMtbl_name [FROMdb_name];//列出表的列信息,比較詳細(xì),同SHOWFULLFIELDSFROMtbl_name [FROMdb_name]SHOWINDEXFROMtbl_name [FROMdb_name];//列出表的索引信息SHOWSTATUS;//列出 Server 的狀態(tài)信息SHOWVARIABLES;//列出 MySQL 系參數(shù)值SHOWPROCESSLIST;//查看當(dāng)前mysql查詢進(jìn)程SHOWGRANTSFORuser;//列出用戶的授權(quán)命令

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'; //查詢某一個(gè)符合條件的表項(xiàng)

13.update查詢:

//查詢并修改表中的一項(xiàng),最后更新表格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; //刪除表中的某一項(xiàng)

15.ALTER命令:

mysql> ALTERTABLEtestalter_tbl? DROP i;//刪除以上表的 i 字段mysql> ALTERTABLEtestalter_tbl ADD i INT;//在表 testalter_tbl 中添加 i 字段,并定義數(shù)據(jù)類型mysql> ALTERTABLEtestalter_tbl MODIFY c CHAR(10);//把字段 c 的類型從 CHAR(1) 改為 CHAR(10)mysql> ALTERTABLEtestalter_tbl? ? -> MODIFY j BIGINT NOT NULL DEFAULT100;//指定字段 j 為 NOT NULL 且默認(rèn)值為100mysql> ALTERTABLEtestalter_tbl ALTER iSETDEFAULT1000;//使用 ALTER 來修改字段的默認(rèn)值mysql> ALTERTABLEtestalter_tbl ALTER i DROP DEFAULT;//使用 ALTER 命令及 DROP子句來刪除字段的默認(rèn)值mysql> ALTERTABLEtestalter_tbl RENAMETOalter_tbl;//修改表名

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

16.正則表達(dá)式:

正則表達(dá)式是通用的,和C、Linuxshell一樣的。

mysql>SELECTnameFROMperson_tblWHEREname REGEXP'^st';//查找name字段中以'st'為開頭的所有數(shù)據(jù)mysql>SELECTnameFROMperson_tblWHEREname REGEXP'ok$';//查找name字段中以'ok'為結(jié)尾的所有數(shù)據(jù)mysql>SELECTnameFROMperson_tblWHEREname REGEXP'mar';//查找name字段中包含'mar'字符串的所有數(shù)據(jù)mysql>SELECTnameFROMperson_tblWHEREname REGEXP'^[aeiou]|ok$';//查找name字段中以元音字符開頭且以'ok'字符串結(jié)尾的所有數(shù)據(jù)

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編程:

實(shí)質(zhì)就是C語言調(diào)用libmysql.lib庫,使用其提供的的函數(shù)來連接,訪問,修改MySQL數(shù)據(jù)庫中的內(nèi)容。

1. MYSQL結(jié)構(gòu)體:

這個(gè)結(jié)構(gòu)主要用于連接,保存一些連接的信息。

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結(jié)構(gòu)體:

這個(gè)結(jié)構(gòu)主要是返回一些操作數(shù)據(jù)庫(SELECT, SHOW, DESCRIBE, EXPLAIN等)的結(jié)果,即“數(shù)據(jù)集”。

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編程步驟:

具體有哪些函數(shù),可以到網(wǎng)上搜索一下相關(guān)介紹,這里講一下編程步驟:

(1)、首先我們要包含mysql的頭文件,并鏈接mysql動(dòng)態(tài)庫。即添加以下語句:

#include ? ? ? // 進(jìn)行網(wǎng)絡(luò)編程需要winsock2.h

#include

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

(2)、創(chuàng)建MYSQL變量。如:

MYSQL mysql;

(3)、初始化MYSQL變量。

mysql_init(&mysql);

(4)、調(diào)用mysql_real_connect函數(shù)連接Mysql數(shù)據(jù)庫。mysql_real_connect函數(shù)的原型如下:

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);

參數(shù)說明:mysql--前面定義的MYSQL變量;host--MYSQL服務(wù)器的地址;user--登錄用戶名;passwd--登錄密碼;db--要連接的數(shù)據(jù)庫;port--MYSQL服務(wù)器的TCP服務(wù)端口;unix_socket--unix連接方式,為NULL時(shí)表示不使用socket或管道機(jī)制;clientflag--Mysql運(yùn)行為ODBC數(shù)據(jù)庫的標(biāo)記,一般取0。

連接失敗時(shí)該函數(shù)返回0。

(5)、調(diào)用mysql_real_query函數(shù)進(jìn)行數(shù)據(jù)庫查詢。mysql_real_query函數(shù)的原型如下:

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

參數(shù)說明:mysql--前面定義的MYSQL變量;q--SQL查詢語句;length--查詢語句的長度。

查詢成功則該函數(shù)返回0。

(6)、通過調(diào)用mysql_store_result或mysql_use_result函數(shù)返回的MYSQL_RES變量獲取查詢結(jié)果數(shù)據(jù)。

兩個(gè)函數(shù)的原型分別為:

MYSQL_RES *? ? STDCALL mysql_store_result(MYSQL *mysql);

MYSQL_RES *? ? STDCALL mysql_use_result(MYSQL *mysql);

這兩個(gè)函數(shù)分別代表了獲取查詢結(jié)果的兩種方式。第一種,調(diào)用端,然后讀取;第二種,調(diào)用mysql_use_result初始化檢索,以便于后面一行一行的讀取結(jié)果集,而它本身并沒有從服務(wù)器讀取任何數(shù)據(jù),這種方式較之第一種速度更快且所需內(nèi)存更少,但它會(huì)綁定服務(wù)器,阻止其他線程更新任何表,而且必須重復(fù)執(zhí)行mysql_fetch_row讀取數(shù)據(jù),直至返回NULL,否則未讀取的行會(huì)在下一次查詢時(shí)作為結(jié)果的一部分返回,故經(jīng)常我們使用mysql_store_result。

(7)、調(diào)用mysql_fetch_row函數(shù)讀取結(jié)果集數(shù)據(jù)。

上述兩種方式最后都是重復(fù)調(diào)用mysql_fetch_row函數(shù)讀取數(shù)據(jù)。mysql_fetch_row函數(shù)的原型如下:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

參數(shù)result就是mysql_store_result或mysql_use_result的返回值。

該函數(shù)返回MYSQL_ROW型的變量,即字符串?dāng)?shù)組,假設(shè)為row,則row[i]為第i個(gè)字段的值。當(dāng)?shù)浇Y(jié)果集尾部時(shí),此函數(shù)返回NULL。

(8)、結(jié)果集用完后,調(diào)用mysql_free_result函數(shù)釋放結(jié)果集,以防內(nèi)存泄露。mysql_free_result函數(shù)的原型如下:

void? STDCALL mysql_free_result(MYSQL_RES *result);

(9)、不再查詢Mysql數(shù)據(jù)庫時(shí),調(diào)用mysql_close函數(shù)關(guān)閉數(shù)據(jù)庫連接。mysql_close函數(shù)的原型為:

void STDCALL mysql_close(MYSQL *sock);

4. MySQL C API編程例子:

#if defined(_WIN32) || defined(_WIN64)//為了支持windows平臺(tái)上的編譯#include #endif#include #include #include "mysql.h"http://我的機(jī)器上該文件在/usr/local/include/mysql下//定義數(shù)據(jù)庫操作的宏,也可以不定義留著后面直接寫進(jìn)代碼#define SELECT_QUERY "select username from tbb_user where userid = %d"intmain(intargc,char**argv)//char **argv 相當(dāng)于 char *argv[]{? ? MYSQL mysql,*sock;//定義數(shù)據(jù)庫連接的句柄,它被用于幾乎所有的MySQL函數(shù)MYSQL_RES *res;//查詢結(jié)果集,結(jié)構(gòu)類型MYSQL_FIELD *fd ;//包含字段信息的結(jié)構(gòu)MYSQL_ROW row ;//存放一行查詢結(jié)果的字符串?dāng)?shù)組charqbuf[160];//存放查詢sql語句字符串if(argc !=2) {//檢查輸入?yún)?shù)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

最后看一個(gè)例子,另一個(gè)網(wǎng)友VS2015 C連接MySQL的實(shí)現(xiàn):

VS2015連接mySQL數(shù)據(jù)庫

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個(gè)數(shù)據(jù)庫具有一個(gè)或多個(gè)不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,124評(píng)論 0 19
  • MySQL 數(shù)據(jù)庫常用命令 1、MySQL常用命令 create database name; 創(chuàng)建數(shù)據(jù)庫 use...
    55lover閱讀 5,038評(píng)論 1 57
  • 1、MySQL啟動(dòng)和關(guān)閉(安裝及配置請(qǐng)參照百度經(jīng)驗(yàn),這里不再記錄。MySQL默認(rèn)端口號(hào):3306;默認(rèn)數(shù)據(jù)類型格式...
    強(qiáng)壯de西蘭花閱讀 751評(píng)論 0 1
  • 咳嗽,空氣中的塵埃,微小顆粒引起的肺部堵塞,特別是肺活量大時(shí),肺部又熱,更容易損傷,所以及時(shí)撣掉大顆粒塵埃,有助于...
    強(qiáng)子_fa09閱讀 229評(píng)論 0 0
  • 生活中的10%是由發(fā)生在你身上的事情組成,而另外的90%則是由你對(duì)所發(fā)生的事情如何反應(yīng)所決定。- -費(fèi)斯汀格法則 ...
    阿甘的蝸牛屋閱讀 831評(píng)論 0 1

友情鏈接更多精彩內(nèi)容