總結事務是要保證一組資料庫操作,要麼全部執行成功,要麼都不執行。
mysql支援多引擎,但是並不是所有引擎都支援事務,
mysql中只有使用了innodb資料庫引擎才支援事務。
事務的特性(acid):atomicity原子性,consistency一致性,isolation隔離性,durability永續性。
本文主要了解隔離性。
當資料庫上有多個事務同時執行的時候,就可能出現髒讀,不可重複讀,幻讀的問題,為了解決這些問題,就有了事務隔離。
事務隔離的越嚴謹效能越差,所以實際運用中要在效能和資料之間尋找乙個平衡點。
事務隔離的級別:
本文重點介紹讀提交和可重複讀。
在mysql中有兩個檢視的概念:
到此所有相關概念已經介紹完畢,接下來進行資料庫操作。
create table `t` (
`k` int(11) default null
) engine=innodb;
insert into t(k) values(1);
查詢當前視窗隔離級別:
select @@session.tx_isolation;
設定當前連線視窗隔離級別:
接下來看一下在不同的隔離事務級別下,事務a中a2、a3、a4會有什麼不同的結果。
以上現象具體實現:不同隔離級別下,會根據規則建立乙個資料快照,即一致性檢視。
在讀提交隔離級別下,在sql語句執行前計算並建立最新檢視,此檢視承認所有已提交的變更資料。
在可重複讀隔離級別下,會在事務真正啟動時,建立一致性檢視,此檢視包含所有已提交變更版本的資料及正在執行的事務,整個事務過程中始終都用這乙個檢視,在不存在update(當前讀)語句情況下,資料值不會發生改變。
讀未提交隔離級別下,直接返回記錄上的最新值,不存在檢視。
序列化利用讀寫鎖保證資料一致性,不存在並行訪問。
mysql事務隔離最高 Mysql事務隔離級別
mysql官方文件顯示 innodb中每個隔離級別的詳細描述如下 read uncommitted select語句以非鎖定方式被執行,但是乙個可能更早期版本的記錄會被用到。因此,使用這個隔離級別,比如,讀是不連貫的。著也被稱為 髒讀 dirty read 另外,這個隔離級別象read commit...
MySQL 事務隔離
未提交讀 read uncommitted 允許髒讀,也就是可能讀取到其他會話中未提交事務修改的資料 提交讀 read committed 只能讀取到已經提交的資料。oracle等多數資料庫預設都是該級別 不重複讀 可重複讀 repeated read 可重複讀。在同乙個事務內的查詢都是事務開始時刻...
Mysql 事務隔離
1 事務的特性 原子性 一致性 隔離性 永續性 2 多事務同時執行的時候,可能會出現的問題 髒讀 不可重複讀 幻讀 3 事務隔離級別 讀未提交 讀提交 可重複讀 序列化 4 不同事務隔離級別的區別 讀未提交 乙個事務還未提交,它所做的變更就可以被別的事務看到 讀提交 乙個事務提交之後,它所做的變更才...