2. MySQL數(shù)據(jù)庫的安裝 安裝MySQL數(shù)據(jù)庫需要三個(gè)軟件包:
(1)服務(wù)器
(2)客戶端
(3) 開發(fā)庫-如果用C或C語言開發(fā),就得安裝開發(fā)庫。
MySQL-server-5.5.8-1.rhel5.i386.rpm
MySQL-client-5.5.8-1.rhel5.i386.rpm
MySQL-devel-5.5.8-1.rhel5.i386.rpm 在Linux下用rpm -ivh 安裝即可。
3. MySQL的相關(guān)目錄
/usr/bin MySQL客戶端程序或腳本
/usr/sbin mysqld服務(wù)器相關(guān)程序
/var/lib/mysql 日志文件,數(shù)據(jù)庫數(shù)據(jù)文件存放目錄
/usr/share/doc/packages 使用手冊(cè),開發(fā)文檔存放目錄
/usr/include/mysql 接口函數(shù)庫頭文件存放目錄
/usr/lib/mysql 接口函數(shù)動(dòng)態(tài)鏈接庫存放目錄
/usr/share/mysql 錯(cuò)誤消息和字符集文件存放目錄
/usr/share/sql-bench 基本程序存放目錄
4. MySQL數(shù)據(jù)庫的基本操作
(1)啟動(dòng)MySQL服務(wù)器 service mysql start
(2) 停止MySQL服務(wù)器 service mysql stop
(3)root用戶指的是MySQL數(shù)據(jù)庫下的root目錄而不是Linux下的root用戶
為root用戶添加密碼: mysqladmin -u root password 123 //為root用戶添加了新密碼123
修改root用戶密碼為234: mysqladmin -u root -p password 234
Enter password:
或者是: mysqladmin -u root -p password
Enter password:
New password:
Confirm new password:
(4)建立數(shù)據(jù)庫和表
首先進(jìn)入用戶下,如在root用戶下建立一個(gè)db_record的數(shù)據(jù)庫: mysql -u root -p
Enter password:
create database db_record
然后切換到當(dāng)前數(shù)據(jù)庫下,建立表: use db_record create table friends ( name Char(15),telephone VarChar(20));
最后向表中插入數(shù)據(jù) insert into friends (name,telephone) Values ("john","222");
查詢: select * from friends;
(5)建立,刪除用戶及授權(quán)
insert into mysql.user(Host,User,Password) values("localhost","min",password("123"));
flush privileges; //刷新權(quán)限列表
grant all privileges on tree.* to min@localhost identified by '123'; //授權(quán)min用戶擁有tree數(shù)據(jù)庫的所有權(quán)
也可以: grant select, insert,update,delete on db_record.* to min@localhost identified by '123';
刪除用戶: 將該用戶的記錄從MySQL數(shù)據(jù)庫刪除:
use mysql //切換數(shù)據(jù)庫
delete from user where user='min' and host='localhost'; //刪除min用戶的記錄
flush privileges; //刷新權(quán)限
5. C語言操作MySQL數(shù)據(jù)庫
步驟:
(1)初始化MySQL庫,庫可以是mysqlclient C客戶端庫,或mysqld嵌入式服務(wù)器庫,函數(shù) mysql_library_init(),對(duì)于與客戶端鏈接的應(yīng)用程序,提供了改進(jìn)內(nèi)存管理的功能。
(2)初始化連接處理程序 mysql_init();主要是用來初始化數(shù)據(jù)庫標(biāo)識(shí)符,為連接準(zhǔn)備
(3)連接到MySQL服務(wù)器,mysql_real_connect()函數(shù)。
(4) 調(diào)用 mysql_close()關(guān)閉與MySQL服務(wù)器的連接
(5)調(diào)用mysql_library_end()函數(shù)結(jié)束MySQL庫的使用,包括釋放內(nèi)存,防止內(nèi)存泄露等操作。
下面是用C語言操作MySQL數(shù)據(jù)庫的例子:
/** 1.連接與查詢MySQL數(shù)據(jù)庫 連接MySQ數(shù)據(jù)庫步驟: (1) 調(diào)用mysql_library_init()初始化MySQL數(shù)據(jù)庫,提供初始化數(shù)據(jù)庫管理,對(duì)于與客戶端鏈接的應(yīng)用程序,提供了改進(jìn)的內(nèi)存管理功能 (2)mysql_init()初始化連接處理程序,并調(diào)用mysql_real_connect()函數(shù)連接到MySQL服務(wù)器 (3)mysql_close()函數(shù)關(guān)閉與MySQL服務(wù)器的連接 (4)mysql_libary_end函數(shù)結(jié)束MySQL庫的使用,包括釋放內(nèi)存等操作 mysql_library_init(int argc,char**argv,char**groups)//用來接收應(yīng)用程序傳遞的參數(shù),如果應(yīng)用程序不傳遞參數(shù),那么argc=0,argv指針數(shù)組中的第一個(gè)參數(shù)是應(yīng)用程序名 groups是以NULL為終結(jié)的字符串列表中選擇了選項(xiàng)文件中的活動(dòng)的groups,groups也可以為NULL mysql_init(MYSQL*mysql)傳遞的參數(shù)是數(shù)據(jù)庫標(biāo)識(shí)符,用于分配或初始化與mysql_real_connect相適應(yīng)的MYSQL對(duì)象,如果mysql的實(shí)際參數(shù)為NULL指針,將分配初始化新對(duì)象,否則初始化對(duì)象,并返回對(duì)象的地址 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 client_flag) //嘗試與運(yùn)行在主機(jī)上的MYSQL數(shù)據(jù)庫引擎建立連接 //第一個(gè)參數(shù)是可用的MYSQL結(jié)構(gòu)地址,host必須為主機(jī)名或ip,如果為NULL或localhost被視為本地主機(jī),user為用戶名,passwd為密碼,db是數(shù)據(jù)庫名,port為端口號(hào),unix_socket為應(yīng)使用的套接字,client_flag參數(shù)值通常為0 mysql_close(MYSQL*mysql)//關(guān)閉連接,釋放對(duì)象的內(nèi)存空間 mysql_library_end()如果不調(diào)用該函數(shù),可能造成內(nèi)存泄露 2.MySQL函數(shù)使用 查詢MYSQL數(shù)據(jù)庫: int mysql_query(MYSQL*mysql,const char* query) int mysql_real_query(MYSQL *mysql,const char* query,unsinged long length) //mysql_query函數(shù)是以NULL為終結(jié)的字符串查詢指向的SQL查詢,不應(yīng)該為語句加中;或/g //而mysql_real_query是以計(jì)數(shù)字符串為終結(jié)的查詢 如果查詢字符串包含二進(jìn)制數(shù)據(jù),只能用mysql_real_query,因?yàn)槎M(jìn)制數(shù)據(jù)可能包含/0,導(dǎo)致計(jì)算字符串的長度不正確 mysql_real_query比mysql_query快,因?yàn)楹笳咝枰猻trlen計(jì)算查詢字符串的長度 MYSQL_RES *mysql_store_result(MYSQL *mysql) MYSQL_RES *mysql_use_result(MYSQL *mysql) //mysql_store_result將查詢的結(jié)果集全部讀取到客戶端,并放于1個(gè)MYSQL_RES的結(jié)構(gòu)中去,如果讀取失敗將返回NULL指針 //mysql_use_result函數(shù)是初始化結(jié)果集檢索,而不是將數(shù)據(jù)讀取到客戶端,它必須通過mysql_fetch_row()函數(shù)對(duì)每一行進(jìn)行檢索 //與mysql_store_result相比,每次只讀取一行,所以速度快,而且不用緩存,內(nèi)存占用少,僅對(duì)當(dāng)前行與通信緩沖區(qū)分配內(nèi)存即可 MYSQL_ROW mysql_fetch_row(MYSQL_RES*result)//實(shí)際檢索來自服務(wù)器的行,檢索結(jié)果集的下一行 unsigned long *mysql_fetch_lengths(MYSQL_RES *result)//用來返回當(dāng)前行中的列的長度,該長度有助于信息的優(yōu)化,能避免用strlen函數(shù),對(duì)于包含二數(shù)據(jù)的結(jié)果集,只能用這個(gè)函數(shù) void mysql_free_result(MYSQL_RES*result) 函數(shù)釋放為mysql_store_result,mysql_use_result分配的結(jié)果集內(nèi)存 mysql_store_result把所有查詢的結(jié)果都返回給了客戶端,不僅能連續(xù)訪問查詢結(jié)果,還能用mysql_row_seek()函數(shù)在結(jié)果集中向前或向后移動(dòng)、 還可以調(diào)用 mysql_num_rows()來發(fā)現(xiàn)有多少行 另一方面,如果數(shù)據(jù)很大,可能造成內(nèi)存溢出 mysql_use_result客戶端用于保存查詢結(jié)果集的內(nèi)存較少,每次只返回一條,所以速度比前者快 但不能隨機(jī)訪問結(jié)果集,只能順序存取,也不能知道查詢結(jié)構(gòu)的總行數(shù) 必須快速的處理查詢結(jié)構(gòu),否則影響服務(wù)器的性能,因?yàn)椴樵儾僮鞯臅?huì)話依然存在 **/ //gcc -g -o mysql mysql1.c -I/usr/include/mysql -L/usr/lib -lmysqlclient -lpthread -lm -lrt -ldl //$(mysql_config --cflags) $(mysql_config --libs) #include#include #include #include static char* server_groups[]={"embedded","server","this_program_server",(char*)NULL}; int main(){ MYSQL mysql; MYSQL_RES *res; MYSQL_ROW row; char sqlcmd[200]; int t,r; mysql_library_init(0,NULL,server_groups);//初始化MYSQL數(shù)據(jù)庫 mysql_init(&mysql);//初始化MYSQL標(biāo)識(shí)符,用于連接 if(!mysql_real_connect(&mysql,"localhost","root","root","db_record",0,NULL,0)){ fprintf(stderr,"無法連接到數(shù)據(jù)庫,錯(cuò)誤原因是:%s/n",mysql_error(&mysql)); } else { puts("數(shù)據(jù)庫連接成功"); //首先向數(shù)據(jù)庫中插入一條記錄 sprintf(sqlcmd,"%s","insert into friends (name,telephone) Values ('xx','xx')"); mysql_query(&mysql,sqlcmd); sprintf(sqlcmd,"%s","select * from friends"); t=mysql_real_query(&mysql,sqlcmd,(unsigned int)strlen(sqlcmd)); if(t){ printf("查詢數(shù)據(jù)庫失敗%s/n",mysql_error(&mysql)); } else { res=mysql_store_result(&mysql);//返回查詢的全部結(jié)果集 while(row=mysql_fetch_row(res)){//mysql_fetch_row取結(jié)果集的下一行 for(t=0;t
gcc -g -o mysql mysql1.c -I/usr/include/mysql -L/usr/lib -lmysqlclient -lpthread -lm -lrt -ldl
也可以: gcc -g -o mysql mysql.c $(mysql_config --cflags) $(mysql_config --libs)
解釋:
(1) mysql_config --cflags 尋找mysql編譯相關(guān)的頭文件等信息。
(2) mysql_config --libs 尋找mysql編譯所需要的庫函數(shù)。
(3) -L/usr/lib 指出靜態(tài)庫尋找的路徑。在這里也可以不寫,因?yàn)橄到y(tǒng)會(huì)去默認(rèn)的/lib,/usr/lib去尋找?guī)旌瘮?shù)。如果libmysqlclient.a在/usr/lib/mysql下,那么-L/usr/lib/mysql 這個(gè)目錄。
(4)非標(biāo)準(zhǔn)的庫函數(shù),鏈接時(shí)用-lmysqlclient.原庫名為libmysqlclient.a去掉lib和.a。
(5) -I是包含頭文件等信息,及include . (6) 動(dòng)態(tài)鏈接庫的尋找順序:
a. LD_LIBRARY_PATH設(shè)置的目錄下.
b. /etc/ld.so.conf 加到這個(gè)文件中的目錄。
c. 默認(rèn)的 /usr/lib,/lib目錄下。 (7)頭文件的尋找順序
a. -I所指定的目錄中去尋找
b.gcc的環(huán)境變量指定的目錄 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH c. /usr/include /usr/local/include 等目錄下尋找。
(8)靜態(tài)庫的尋找順序
a. -L所指定的靜態(tài)庫尋找路徑
b.gcc環(huán)境變量LIBRARY_PATH
c. /lib ,/usr/lib,/usr/local/lib 如果MySQL數(shù)據(jù)庫啟動(dòng)不起來,可以先執(zhí)行killall mysqld ,然后再用service mysql start試試。
關(guān)于MySQL數(shù)據(jù)庫的基本操作就總結(jié)到這里了。
http://blog.csdn.net/chenjin_zhong/article/details/6115205
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com