一、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。
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
實(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):