使用者訪問資料庫時,資料庫會為使用者開啟乙個程序,使用者可以通過這個程序對資料庫進行增、刪、改、查的操作,這個程序就稱為事務。
(1)原子性:
指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生
(例如:在乙個事務中,對t1表新增乙個資料,並對t2表刪除乙個資料,這兩步操作要麼都成功,要麼都不成功,不會只執行乙個,另乙個失敗)
(2)一致性:
指事務的操作使資料庫從乙個一致性狀態變為另乙個一致性狀態
(3)隔離性:
指多個使用者併發訪問資料庫時,資料庫會為每個使用者開啟乙個事務,每個事務訪問的資料不能被其他事務運算元據干擾,多個併發事務之間要相互隔離
(4)永久性:
指乙個事務一旦被提交它對資料庫的改變是永久的
事務的隔離級別分為4個:read uncommitted ,read committed,repeatable read,serializable
(1)read uncommitted :最低級別,髒讀、不可重複讀、虛讀都會發生;
(2)read committed:防止髒讀的發生,不可重複讀,虛讀都會發生;
(3)repeatable read:防止髒讀,不可重複讀,虛讀的發生(mysql預設隔離級別);
(4)serializable:防止髒讀,不可重複讀,虛讀的發生(對事務上鎖,乙個事務操作時,另乙個事務會被阻塞)
(1)髒讀:乙個執行緒中的事務讀取到了另乙個執行緒中事務未提交的資料;
(2)不可重複讀:乙個執行緒中的事務,前後讀到同一條記錄不一致;
(3)虛讀:乙個執行緒中的事務,前後讀到的記錄條數不一致;
(1)檢視隔離級別:select @@tx_isolation;
(2)更改隔離級別:set session transaction isolation level 四個級別之一 (暫時更改,關閉mysql會恢復到預設)
set global transaction isolation level 四個級別之一 (永久更改)
注意:將表的儲存引擎改為innodb格式,預設為myisam不支援事務
alter table 庫名.表名 engine=innodb
1、設定3種型別的隔離級別
3、在第乙個事務中將id=1的age更改為100,並沒有提交,分別在其他兩個事務中查詢,read uncommitted隔離級別的事務中出現髒讀,而read committed事務中讀取的id=1的age並沒有改變。
1、同樣開啟三種隔離級別的事務
2、在預設級別事務中更改資料,並沒有提交事務,在read committed沒有出現髒讀;
3、將左邊事務提交,右邊事務依舊訪問student**,此時會出現不可重複讀
1、同上,開啟兩個事務
2、在左邊事務中插入一條資料並提交,右邊事務不提交,查詢資料
MySQL 事務詳解
mysql 事務主要用於處理操作量大,複雜度高的資料。比如說,在人員管理系統中,你刪除乙個人員,你既需要刪除人員的基本資料,也要刪除和該人員相關的資訊,如信箱 文章等等,這樣,這些眾多的資料庫操作語句就構成乙個事務!一般來說,事務必須滿足以下 4 個條件 acid 而我們在學習事務的時候最複雜也是最...
Mysql事務詳解
不可重複讀和幻讀的區別應該在於 不可重複讀是主要是說多次讀取一條記錄,發現該記錄中某些列值被修改過。幻讀是主要是說多次讀取乙個範圍內的記錄 包括直接查詢所有記錄結果或者做聚合統計 發現結果不一致 標準檔案一般指記錄增多,記錄的減少應該也算是幻讀 解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要...
mysql事務詳解
轉至 參考 mysql隔離級別 通俗理解 mysql oracle預設事務隔離級別 簡單點總結下他們的區別 髒讀是指讀取了未修改完的記錄,不可重複讀指因為被其它事務修改了記錄導致某事務兩次讀取記錄不一致,而幻讀是指因為其它事務對錶做了增刪導致某事務兩次讀取的表記錄數不一致問題。1 read unco...