– 預設隔離級別,mysql是repeatable reads(可重複讀),其他資料庫一般是 read committed(讀已提交)
事務的隔離級別分為:
read uncommitted(讀未提交)
read committed(讀已提交)
repeatable reads(可重複讀)
serializable(序列化)
show variables like
'%isolation%'
;-- transaction_isolation repeatable-read
read uncommitted
讀未提交:隔離級別最低的一種事務級別。在這種隔離級別下,會引發髒讀、不可重複讀和幻讀。
read committed
讀已提交讀到的都是別人提交後的值。這種隔離級別下,會引發不可重複讀和幻讀,但避免了髒讀。
repeatable reads
可重複讀這種隔離級別下,會引發幻讀,但避免了髒讀、不可重複讀。
serializable
序列化是最嚴格的隔離級別。在serializable隔離級別下,所有事務按照次序依次執行。髒讀、不可重複讀、幻讀都不會出現。
-- 此時 在另外乙個事務中更新一條記錄,但是不提交事務,在本次事務內也能看到更新的最新值,如果另外乙個事務最後回滾了改記錄,這就是一條髒讀的記錄。
-- update ts_test set version_test='update o' where id =2; //mysql 如果插入一條記錄,可能導致間隙鎖鎖定改事務導致看不到未提交讀的效果。
select
*from ts_test;
-- 這個時候看到髒資料 update o
-- 此時另外乙個事務 回滾了
-- rollback;
select
*from ts_test;
-- 這個時候看到原始值 update xx
commit
;
start
transaction
;set
session
transaction
isolation
level
read
committed
;select
*from ts_test;
-- 此時 在另外乙個事務中更新一條記錄,但是不提交事務,在本次事務不會看到這個修改。
-- update ts_test set version_test='update o' where id =2;
select
*from ts_test;
-- 這個時候不會看到髒資料 update o
-- 此時另外乙個事務提交,將看到已提交的記錄;
-- commit;
select
*from ts_test;
-- 不可重複讀 這個時候看到提交的值 update o
-- 此時另外乙個事務新增一條提交的記錄,本次事務也能看到,幻讀;
-- insert into ts_test (id,version_test) values(21,'21');
select
*from ts_test;
-- 幻讀,看到了另外乙個事務提交的新行,是本次事務開始的是沒有的行
commit
;
start
transaction
;set
session
transaction
isolation
level
repeatable
read
;select
*from ts_test;
-- 此時 在另外乙個事務中更新一條記錄,並且提交事務,在本次事務不會看到這個修改。
-- update ts_test set version_test='update o' where id =2;
select
*from ts_test;
-- 可重複讀 這個時候不會看到已提交的值 update o
-- 此時另外乙個事務新增一條提交的記錄,本次事務也能無法看到幻讀,因為mysql的間隙鎖解決了這個問題;
-- insert into ts_test (id,version_test) values(22,'22');
select
*from ts_test;
-- 不會幻讀,不會看到了另外乙個事務提交的新行,是本次事務開始的是沒有的行
commit
;
start
transaction
;set
session
transaction
isolation
level
serializable
;select
*from ts_test;
-- 此時 在另外乙個事務中更新一條記錄,則在另外乙個事務中無法執行該錶的操作
-- update ts_test set version_test='update 24' where id =2;
-- 等該事務提交之後,另外乙個事務才能更新成功,否則別阻塞,阻塞時間和資料庫有關係。
commit
;
資料庫事務
事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...
資料庫 事務
資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...
資料庫事務
這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...