事務
一個最小的不可再分單元;
通常一個事務對應一個完整的業務;
而一個完整的業務需要批量的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;
開啓事務處理等待狀態