MySQL事務解釋

事務
一個最小的不可再分單元;
通常一個事務對應一個完整的業務;
而一個完整的業務需要批量的DML(insert ,update,delete)語句共同完成;
事務只和DML語句有關係,或者說只有DML語句纔有事務;

事務的四個特徵ACID
1.原子性:
事務是最小單元,不可再分;
2.一致性:
事務要求所有的DML語句操作的時候,必須保證同時成功或者同時失敗
3.隔離性:
一個事務不會影響其他事務的運行;
4.持久性:
在事務完成之後,該事物對數據庫所作的更改將持久地保存在數據庫中,並不會被回滾;

//查詢是否爲自動提交
show variables like '%commit%';
//開啓事務,但是數據沒有提交
 start transaction;
 insert into t_user(name) values ('kkk');
//事務結束
commit;

事務的隔離級別
查看隔離級別

select @@tx_isolation;
select @@session.tx_isolation;

1.測試read uncommitted(未提交讀)

-- 開啓事物
start transaction;
update student set ssex='男' where sname = '李四';

查詢發現數據已經改變,這就是髒讀,讀到了未提交的數據

ROLLBACK;

再次查詢數據變爲原來的

2.測試read committed(已提交讀)
設置事務級別爲read committed,開啓事務

set session transaction isolation level read COMMITTED;
start transaction;

修改數據,不提交事務

update student set ssex='男' where sname = '李四';

查詢發現數據沒有變化,防止了髒讀
提交事務

commit;

再次查詢,數據變化,但是不要求可重複讀

3.測試repeatable read(可重複讀)
將兩個窗口級別都設置爲repeatable read(可重複讀)

set session transaction isolation level repeatable read;

開啓事務,更新數據不提交

start transaction;
update student set ssex='男' where sname = '李四';

查詢發現數據未修改,沒有髒讀
提交事務

commit;

再次查詢,可以重複讀

4.測試 串行化(serializable)
將窗口一和窗口二事物隔離級別設置爲 串行化(serializable)

set session transaction isolation level serializable;

開啓事務處理等待狀態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章