初學Windows下mysql的安裝以及其C API使用
來源:互聯網
上載者:User
主要介紹mysql在windows下的安裝以及一些基本的應用.並且介紹了其CAPI的使用.一, mysql的安裝和使用。
1, 安裝mysql,http://dev.mysql.com/downloads/下載mysql-4.0.23-win.zip,聽說這個版本比較穩定,曾經下載過mysql-4.1.7-win.zip,但是不好用,老是啟動的時候提示進程意外終止,下載完以後就一路next拉。
2, 啟動mysql,進入c:/mysql/bin,點擊winmysqladmin就好了,第一次進去的時候會要求填入使用者名稱和密碼的,以便在系統目錄下產生my.ini檔案。所以要注意在卸載mysql的時候一定要搜尋一下my.ini,並且把他刪除,免得他影響下一次的安裝。不過以後啟動就用net start mysql,關閉使用net stop mysql就好了。可以輸入c:/mysql/bin/mysql來測試一下。
3, 使用者管理,剛安裝的時候只有兩個使用者,一個是root,一個是空,他們的密碼都為空白。我們先為root來設定口令。C:/mysql/bin/mysqladmin -u root password "1234567"。 mysql -u root -p.輸入密碼以後就可以看見mysql提示符了,
show databases;查看所有的資料庫,記得一定要打後面的分號,斷行符號只是換行。
use mysql; 選擇資料庫mysql,
show tables from mysql; 查看資料庫mysql中的所有表格,在user表格中就記錄了使用者名稱,密碼,使用者權限等資訊。
Select host,password,user from user; user裡面列數太多了,看到這三個資訊就差不多了,裡面列出來了所有的使用者名稱,以及允許登陸的地址。在這裡先刪除匿名使用者,delete from user where user="",接著把host不是本地的刪除,delete form user where host=www.*.com,現在就只剩下一個root使用者可以從本地登陸我的資料庫了。下面添加一個常用的使用者,假定該使用者可以從任意地址登入,並且擁有所有的許可權,grant all privileges on *.* to sagely@"%" identified by ‘密碼' with GRANT OPTION。再一次Select host,password,user from user;就可以看到多了一個sagely使用者,他可以從任何地址登入,至於添加別的使用者也是同理,只是可能許可權控制不同,可以使用插入user中一條記錄來實現,譬如insert into user values(‘localhost','sage',PASSWORD(‘123'),'Y','Y','Y','Y',,,,,);來實現,具體的Y還是N依照許可權而定。這樣就實現了對mysql資料庫使用者的管理。
4, 資料的插入、刪除,修改和查詢。
在這一部分,主要是應用了SQL語句。(在mysql命令列下)
create database ra; 建立一個名為ra的資料庫。
Use ra; Create table usr_info(c varchar(15),st varchar(15),l varchar(15),o varchar(15),u varchar(15),cn varchar(15))建立一個名為usr_info的表,在表中有6個屬性。
Insert into usr_info values("cn","dd","dd","dd","ee","ee")插入具體資料。等等,具體都和SQL語句是一樣的。
二 ,C API的使用
1, 環境的設定
在VC裡的toos->option->directories中將include增加一個c:/mysql/include,將lib增加一個c:/mysql/lib,將libmysql.dll和libmysql.lib拷到目前的目錄下,並且把libmysql.lib增加到工程中。
2, 建立與伺服器的串連。
Include <mysql.h> //包含標頭檔
MYSQL *conn;//定義一個MYSQL類型結構,這個幾乎在所有的後面的編程中都需要
MYSQL *mysql_init(MYSQL *conn);//如果conn=NULL,返回一個新分配的控制代碼結構返回,反之則重新初始化該結構,出現錯誤則返回NULL;
MYSQL *mysql_real_connect(MYSQL * connection,const char *server_host,const char *sql_urs_name,const char *sql_password,const char *db_name,unsigned int port_number,const char *unix_socket_name,unsigned int flags);//串連MYSQL伺服器,裡面的參數應該很清楚了,一般port_number和unix_socket_name的值為0和NULL。例如:
mysql_real_connect(conn_ptr,"localhost","sagely","secret","ra",0,NULL,0);
void mysql_close(MYSQL *connection);關閉一個串連。
3, 執行SQL語句
mysql_select_db(MYSQL *connection,const char *db_name);選定某個資料庫。
int mysql_query(MYSQL *connection,const char *query)//他將執行query語句,運行成功將返回0,例如mysql_query(conn_ptr, Create table cert_info(...),將建立一個名為cert_info的表,幾乎所有的SQL語句都能這麼執行。呵呵,是不是顯得很簡單,他就和命令列中輸入的SQL語句差不多。在使用上面函數的時候一般會使用
my_ulonglong mysql_affected_rows(MYSQL *connection),這個函數返回的是mysql_query對進行改動的行的數量。
4, 處理檢索到的資料
當我們可以執行SQL語句以後,那麼就很容易執行增加刪除修改等操作,但是假若檢索出來的資料存放區在哪裡呢?
MYSQL_RES *mysql_use_result(MYSQL *connection)這個函數得到一個連線物件返回一個結果集合指標,出錯時返回NULL。不過他只是返回一個集合對象初始化來接收資料,並沒有將任何檢索到的資料返回到結果集合中。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)這個函數獲得mysql_use_resul得到的結果結構體,並從中檢索單個行,並返回分配給行結構體的資料,沒有更多資料或出錯時,返回NULL。
Unsigned int mysql_field_count(MYSQL *connection)它得到一個連線物件並返回在集合中欄位的數目。
於是有上面的基礎我們就可以理解下面這段了:(沒有錯誤處理)
mysql_init(&conn_ptr);
mysql_real_connect(conn_ptr,"localhost","sagely","secret","ra",0,NULL,0);
mysql_query(conn_ptr,"SELECT * form usr_info);
res_ptr=mysql_use_result(&conn_ptr);
sqlrow=mysql_fetch_row(res_ptr);
for(int i=0;i<mysql_field_count(&conn_ptr);i++){printf("%s ",sqlrow);}
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)它返回的是列的資訊,比如列的名稱,列所在表名稱等等,有了這個就可以將欄位標題與資料想對應起來了。