默认事务等级_事务
一、事務定義
- 事務:一個最小的不可再分的工作單元;通常一個事務對應一個完整的業務(例如銀行賬戶轉賬業務,該業務就是一個最小的工作單元)
- 一個完整的業務需要批量的DML(insert、update、delete)語句共同聯合完成
- 事務只和DML語句有關,或者說DML語句才有事務。這個和業務邏輯有關,業務邏輯不同,DML語句的個數不同
二、查看事務語句
只有InnoDB支持事務
1.查看 mysql 當前默認的存儲引擎
show variables like '%storage_engine%';
2.查看某張表的存儲引擎
show create table 表名 ;
三、事務特性
1、原子性(atomicity)
一個事務必須被視為一個不可分割的最小單元, 整個事務中的所有操作要么全部提交成功,
要么全部失敗, 對于一個事務來說, 不可能只執行其中的一部分操作
整個事務要么全部成功, 要么全部失敗
2. 一致性(consistency)
一致性是指事務將數據庫從一種一致性轉換到另外一種一致性狀態, 在事務開始之前和事務
結束之后數據庫中數據的完整性沒有被破壞
例如轉賬:A給B轉賬,A減去500,B增加500,減少和增加相加應該是0
3、持久性(durability)
一旦事務提交, 則其所做的修改就會永久保存到數據庫中。 此時即使系統崩潰, 已經提交的
修改數據也不會丟失
并不是數據庫的角度完全能解決
4、隔離性(isolation)
一個事務的執行不能被其他事務干擾。 即一個事務內部的操作及使用的數據對并發的其他事
務是隔離的, 并發執行的各個事務之間不能互相干擾。
(對數據庫的并行執行, 應該像串行執行一樣)
事務并發問題:
- 臟讀:事務A讀取了事務B更新的數據,然后B回滾操作,那么A讀取到的數據是臟數據
- 不可重復讀:事務 A 多次讀取同一數據,事務 B 在事務A多次讀取的過程中,對數據作了更新并提交,導致事務A多次讀取同一數據時,結果 不一致。
- 幻讀:系統管理員A將數據庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束后發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。
不可重復讀的和幻讀很容易混淆,不可重復讀側重于修改,幻讀側重于新增或刪除。解決不可重復讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表
四種隔離級別:
- 未提交讀(READ UNCOMMITED)
事務A讀取到事務B未提交的數據
事務A讀取了事務B更新的數據,然后B回滾操作,那么A讀取到的數據是臟數據
事務A:
set SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
begin;
select * from test ;
insert into test(name,age) values ('李四',20);
事務B:
begin;
set SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
- 已提交讀(READ COMMITED)
set SESSION TRANSACTION ISOLATION LEVEL read committed;
可以讀到已經事務提交的數據
不能出現臟讀
- 可重復讀(REPEATABLE READ)
set SESSION TRANSACTION ISOLATION LEVEL repeatable read;
在同一個事務中讀到是同一條數據,其他事務修改了讀的也是修改前的數據
不能出現臟讀和不可重復讀
特別注意的是MySQL數據庫在RR隔離級別時候也解決了幻讀問題
- 可串行化
set SESSION TRANSACTION ISOLATION LEVEL serializable;
在一個事務未提交時候,另外一個事務不能對這個表的數據修改,包括新增、修改、刪除、查詢
四種隔離級別對比:
是:代表能出現;否:代表不能出現
MySQL默認隔離級別是repeatable-read
五、語法
1、開啟事務
begin
START TRANSACTION(推薦)
begin work
2、提交
commit;
3、回滾:
rollback;
4、默認事務時自動提交
SHOW VARIABLES LIKE 'autocommit';結果顯示,autocommit 的值是 ON,表示系統開啟自動提交模式。
在 MySQL 中,可以使用 SET autocommit 語句設置事務的自動提交模式,語法格式如下:
SET autocommit = 0|1|ON|OFF;
對取值的說明:
- 值為 0 和值為 OFF:關閉事務自動提交。如果關閉自動提交,用戶將會一直處于某個事務中,只有提交或回滾后才會結束當前事務,重新開始一個新事務。
- 值為 1 和值為 ON:開啟事務自動提交。如果開啟自動提交,則每執行一條 SQL 語句,事務都會提交一次。
六、事務還原點
savepoint
show variables like '%autocommit%'; 自動提交事務是開啟的
set autocommit=0;
insert into testdemo values(5,5,5);
savepoint s1;
insert into testdemo values(6,6,6);
savepoint s2;
insert into testdemo values(7,7,7);
savepoint s3;
select * from testdemo
rollback to savepoint s2
rollback
總結
- 上一篇: 这文字的起始位置_ae制作文字动画?ae
- 下一篇: 启动标志_牛股启动的标志:天衣无缝。