資料庫事務測試

2021-10-23 02:30:49 字數 3038 閱讀 6159

– 預設隔離級別,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 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...