mysql事務測試

2021-10-04 19:45:18 字數 3022 閱讀 9222

1、開啟mysql的命令列,將自動提交事務給關閉

--檢視是否是自動提交 1表示開啟,0表示關閉

select @@autocommit

;--設定關閉

set autocommit =

0;

2、資料準備

--建立資料庫

create

database

tran

;--切換資料庫 兩個視窗都執行

usetran

;--準備資料

create

table psn(id int

primary

key,name varchar(10

))engine

=innodb

;--插入資料

insert

into psn values(1

,'zhangsan');

insert

into psn values(2

,'lisi');

insert

into psn values(3

,'wangwu');

commit

;

3、測試事務

--事務包含四個隔離級別:從上往下,隔離級別越來越高,意味著資料越來越安全

read

uncommitted

;--讀未提交

read commited;

--讀已提交

repeatable

read

;--可重複讀

(seariable)

--序列化執行,序列執行

--產生資料不一致的情況:

髒讀不可重複讀

幻讀

隔離級別

異常情況

異常情況

讀未提交

髒讀不可重複讀

幻讀讀已提交

不可重複讀

幻讀可重複讀

幻讀序列化

4、測試1:髒讀 read uncommitted

set

session

transaction

isolation

level

read

uncommitted

;a:start

transaction

;a:select

*from psn;

b:start

transaction

;b:select

*from psn;

a:update psn set name=

'msb'

;a:selecet *

from psn

b:select

*from psn;

--讀取的結果msb。產生髒讀,因為a事務並沒有commit,讀取到了不存在的資料

a:commit

;b:select

*from psn;

--讀取的資料是msb,因為a事務已經commit,資料永久的被修改

5、測試2:當使用read committed的時候,就不會出現髒讀的情況了,當時會出現不可重複讀的問題

set

session

transaction

isolation

level

read

committed

;a:start

transaction

;a:select

*from psn;

b:start

transaction

;b:select

*from psn;

--執行到此處的時候發現,兩個視窗讀取的資料是一致的

a:update psn set name =

'zhangsan'

where id =1;

a:select

*from psn;

b:select

*from psn;

--執行到此處發現兩個視窗讀取的資料不一致,b視窗中讀取不到更新的資料

a:commit

;a:select

*from psn;

--讀取到更新的資料

b:select

*from psn;

--也讀取到更新的資料

--發現同乙個事務中多次讀取資料出現不一致的情況

6、測試3:當使用repeatable read的時候(按照上面的步驟操作),就不會出現不可重複讀的問題,但是會出現幻讀的問題

set

session

transaction

isolation

level

repeatable

read

;a:start

transaction

;a:select

*from psn;

b:start

transaction

;b:select

*from psn;

--此時兩個視窗讀取的資料是一致的

a:insert

into psn values(4

,'sisi');

a:commit

;a:select

*from psn;

--讀取到新增的資料

b:select

*from psn;

--讀取不到新增的資料

b:insert

into psn values(4

,'sisi');

--報錯,無法插入資料

--此時發現讀取不到資料,但是在插入的時候不允許插入,出現了幻讀,設定更高階別的隔離級別即可解決

總結:

​ 現在學習的是資料庫級別的事務,需要掌握的就是事務的隔離級別和產生的資料不一致的情況

後續會學習宣告式事務及事務的傳播特性以及分布式事務

mysql事務隔離級別測試

1 髒讀 又稱無效資料讀出。乙個事務讀取另外乙個事務還沒有提交的資料叫髒讀。例如 事務t1修改了一行資料,但是還沒有提交,這時候事務t2讀取了被事務t1修改後的資料,之後事務t1因為某種原因rollback了,那麼事務t2讀取的就是髒資料。2 不可重複讀 同乙個事務中,多次讀出的同一資料是不一致的。...

mysql 事務 數量 Mysql 事務

什麼是事務 不可分割的操作,比如乙個事務要修改 a 表和刪除 b 表的資料兩個操作,這兩個操作都成功,這個事務才 commit,不然 rollback 每條 sql 語句都是乙個事務 只對 dml 生效 caid 一致性 consistency 讓資料保持一定程度的合理性,比如使用者加入購物車,購物...

Mysql 5 5 53 事務與併發測試

1.在事務中使用查詢遇上併發的情況 1 執行緒1事務開啟,執行緒2查詢資料 原始資料 tea name bbb 執行緒1 start transaction 執行緒1 select from t a tea where tea id 1 執行緒2 select from t a tea where ...