1.MySQL有三種鎖的級別(鎖粒度):頁級、表級、行級。html
表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的機率最高,併發度最低。
行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的機率最低,併發度也最高。
頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度通常。
sql
2.MySQL的表級鎖有兩種模式:表共享讀鎖(Table Read Lock)和表獨佔寫鎖(Table Write
Lock)。
數據庫
讀鎖:共享鎖,不會阻塞其餘線程對同一表的讀請求,但會阻塞對同一表的寫請求。只有當讀鎖釋放後,纔會執行其它進程的寫操做。服務器
寫鎖:獨佔鎖,會阻塞其餘線程對同一表的讀和寫操做,只有當寫鎖釋放後,纔會執行其它進程的讀寫操做。併發
LOCK TABLES tb_name {READ|WRITE}; #加鎖 UNLOCK TABLES; #解鎖
3.事務:多項操做要做爲同一個處理單元對待,它們要麼同時都執行,要麼同時都不執行。ide
事務的ACID(Automicity \Consistency \Isolation \Durablility):ui
A:原子性,事務所引發的數據庫操做,要麼都完成,要麼都不執行;spa
C:一致性,在事務開始以前和事務結束之後,數據庫的完整性約束沒有被破壞;
.net
I:隔離性,事務調度時,讓各事務之間的影響儘量小;線程
D:持久性,一旦事務成功完成,系統必須保證任何故障都不會引發事務表示出不一致性;
事務隔離級別:
讀未提交(READ UNCOMMITTED):這種隔離級別能夠讓當前事務讀取到其它事務尚未提交的數據。
讀提交(READ COMMITTED):這種隔離級別能夠讓當前事務讀取到其它事務讀取特定記錄的時候都是同樣的。
可串行(SERIALIZABLE):這種隔離級別將事務放在一個隊列中,每一個事務開始以後,別的事務被掛起。
參考資料:
事務的啓動和提交:
啓動事務:START TANSACTION;
提交事務:COMMIT;
回滾事務:ROLLBACK;
注:服務器變量autocommit=1時,能實現自動提交,每個操做都直接提交。
MySQL鎖機制詳解: http://www.cnblogs.com/huangye-dream/archive/2013/07/06/3174725.html
MySQL事務: http://blog.chinaunix.net/uid-22606185-id-3252443.html