在Ubuntu上只需要如下幾條簡單的命令即可安裝完畢

其中第一條命令用于安裝MySQL的服務器程序,第二條命令用于客戶端登錄操作mysql-server,第三條命令用于編寫客戶端程序時使用。
通過上面安裝完畢后,查看是否安裝成功:

更改配置文件,使MySQL支持遠程登錄(修改/etc/mysql/my.cnf文件):

以安裝默認的root用戶登錄mysql:
# mysql –h 127.0.0.1 –u root –p
登錄后創建一個測試用戶(用戶名:test_user,密碼:123456):
# create user ‘test_user’@’%’ identified by ‘123456’;
為創建的用戶授權(目前授予最大權限,方便操作):
# grant all PRivileges on *.* to ‘test_user’@’%’ ;
創建一個測試數據庫:
createdatabase testdb;
2: MySQL的簡單使用示例


#include <mysql/mysql.h>#include <stdio.h>#include <stdlib.h>int main(int argc,char *argv[]){ MYSQL *conn = NULL; MYSQL_RES *res = NULL; MYSQL_ROW row; const char *mysql_server="192.168.59.129"; const char *username = "test_user"; const char *passWord = "123456"; const char *database = "mysql"; const unsigned short port = 3306; conn = mysql_init(NULL); if(!mysql_real_connect(conn,mysql_server,username,password,database,port,NULL,0)) { fprintf(stderr,"%s/n",mysql_error(conn)); return -1; } if(mysql_query(conn,"show tables")) { fprintf(stderr,"%s/n",mysql_error(conn)); return -2; } res = mysql_use_result(conn); printf("MYSQL tables in mysql database:/n"); while((row=mysql_fetch_row(res)) != NULL) { printf("%s/n",row[0]); } mysql_free_result(res); mysql_close(conn); printf("/n--------------------/n"); printf("finish/n"); getchar(); return 0;} 編譯:gcc -o mysql_client mysql_client.c -lmysqlclient3:數據庫事務的隔離級別
數據庫事務的隔離級別有4個,由低到高依次為readuncommitted, read committed, repeatable read, serializable,這四個級別可以逐個解決臟讀、不可重復讀、幻讀這幾類問題。

注意:我們討論隔離級別的場景,主要是在多個事務并發的情況下,因此,接下來的講解都圍繞事務并發。
3.1) Readuncommitted
公司發工資了,領導把5000元打到singo的賬號上,但是該事務并未提交,而singo正好去查看賬戶,發現工資已經到賬,是5000元整,非常高興。可是不幸的是,領導發現發給singo的工資金額不對,是2000元,于是迅速回滾了事務,修改金額后,將事務提交,最后singo實際的工資只有2000元,singo空歡喜一場。

出現上述情況,即我們所說的臟讀,兩個并發的事務,“事務A:領導該singo發工資”、“事務B:singo查詢工資賬戶”,事務B讀取了事務A尚未提交的的數據。
當隔離級別設置為Readuncommitted時,就可能出現臟讀,如何避免臟讀,請看下一個隔離級別。
3.2) Readcommitted Singo拿著工資卡去消費,系統讀取到卡里確實有2000元,而此時他的老婆也正好在網上轉賬,把singo的工資卡的2000元轉到另一賬戶,并在singo之前提交了事務,當singo扣款時,系統檢查到singo的工資卡已經沒有錢,扣款失敗,singo十分納悶,明明卡里有錢,為何….
出現上述情況,即我們所說的不可重復讀,兩個并發事務:“事務A:singo消費”、“事務B:singo的老婆網上轉賬”。事務A先讀取了數據,事務B緊接著更新了數據,并提交了事務,而事務A再次讀取該數據時,數據已經發生了改變。
當隔離級別設置為Readcommitted時,避免了臟讀,但是可能會造成不可重復讀。
大多數數據庫的默認級別就是Readcommitted,比如sql server, Oracle。如何解決不可重復讀這一問題,請看下一個隔離級別。
3.3) RepeatableRead
當隔離級別被設置為Repeatable Read時,可以避免不可重復讀。當singo拿著工資卡去消費時,一旦系統開始讀取工資卡信息(即事務開始),singo的老婆就不可能對該記錄進行修改,也就是singo的老婆不能在此時進行轉賬。
雖然RepeatableRead避免了不可重復讀,但還有可能出現幻讀。
Singo的老婆工作在銀行部門,她時常通過銀行內部系統查看singo的消費記錄。有一天,她正在查詢到singo當月信用卡的總消費金額(select sum(accout) from transaction where moth=本月)為80元,而singo此時正好在外邊胡吃海喝在收銀臺買單,消費1000元,即新增一條1000元的消費記錄(insert transaction …),并提交了事務。隨后singo的老婆將singo當月信用卡消費的明細打印到A4紙上,卻發小消費金額為1080元,singo的老婆發現很詫異,以為出現了幻覺,幻讀就這樣產生了。
注:MySql的默認隔離級別就是RepeatableRead。
3.4) Serializable
Serializable是最高的事務隔離級別,同時代價也花費最高,性能很低,一般很少使用。在該級別下,事務順序執行。不僅避免了臟讀、不可重復讀、還避免了幻讀。
新聞熱點
疑難解答