国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL數據庫事務隔離級別介紹(Transaction Isolation Level)

2024-07-24 12:47:25
字體:
來源:轉載
供稿:網友

數據庫隔離級別有四種,應用《高性能mysql》一書中的說明:

然后說說修改事務隔離級別的方法:

1.全局修改,修改mysql.ini配置文件,在最后加上

復制代碼 代碼如下:

 #可選參數有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
 [mysqld]
 transaction-isolation = REPEATABLE-READ

這里全局默認是REPEATABLE-READ,其實MySQL本來默認也是這個級別

2.對當前session修改,在登錄mysql客戶端后,執行命令:

要記住mysql有一個autocommit參數,默認是on,他的作用是每一條單獨的查詢都是一個事務,并且自動開始,自動提交(執行完以后就自動結束了,如果你要適用select for update,而不手動調用 start transaction,這個for update的行鎖機制等于沒用,因為行鎖在自動提交后就釋放了),所以事務隔離級別和鎖機制即使你不顯式調用start transaction,這種機制在單獨的一條查詢語句中也是適用的,分析鎖的運作的時候一定要注意這一點

再來說說鎖機制:
共享鎖:由讀表操作加上的鎖,加鎖后其他用戶只能獲取該表或行的共享鎖,不能獲取排它鎖,也就是說只能讀不能寫

排它鎖:由寫表操作加上的鎖,加鎖后其他用戶不能獲取該表或行的任何鎖,典型是mysql事務中

復制代碼 代碼如下:

start transaction;
select * from user where userId = 1 for update;

執行完這句以后

  1)當其他事務想要獲取共享鎖,比如事務隔離級別為SERIALIZABLE的事務,執行

復制代碼 代碼如下:

  select * from user;

   將會被掛起,因為SERIALIZABLE的select語句需要獲取共享鎖

  2)當其他事務執行

復制代碼 代碼如下:

select * from user where userId = 1 for update;
update user set userAge = 100 where userId = 1;

也會被掛起,因為for update會獲取這一行數據的排它鎖,需要等到前一個事務釋放該排它鎖才可以繼續進行

鎖的范圍:

行鎖: 對某行記錄加上鎖
表鎖: 對整個表加上鎖

這樣組合起來就有,行級共享鎖,表級共享鎖,行級排他鎖,表級排他鎖

下面來說說不同的事務隔離級別的實例效果,例子使用InnoDB,開啟兩個客戶端A,B,在A中修改事務隔離級別,在B中開啟事務并修改數據,然后在A中的事務查看B的事務修改效果:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 朔州市| 浙江省| 亚东县| 通城县| 阳城县| 类乌齐县| 阿城市| 东乌珠穆沁旗| 苏尼特右旗| 和政县| 来凤县| 公安县| 柳河县| 七台河市| 太湖县| 阿拉尔市| 汽车| 康定县| 长海县| 宜良县| 剑阁县| 深州市| 永德县| 江城| 隆德县| 洛扎县| 桦南县| 林甸县| 双鸭山市| 南川市| 桐柏县| 化德县| 孝义市| 邯郸市| 永福县| 济源市| 浏阳市| 泗阳县| 建始县| 白玉县| 咸宁市|