一、事務的概念
事務是一種機制、一個操作序列,包含了一組資料庫操作命令,并且把所有的命令作為一個整體一起向系統提交或撤銷操作請求,即這一組資料庫命令要么都執行,要么都不執行,
事務是一個不可分割的作業邏輯單元,在資料庫系統上執行并發操作時,事務是最小的控制單元,
事務適用于多用戶同時操作的資料庫系統的場景,如銀行、保險公司及證券交易系統等等,
事務通過事務的整體性以保證資料的一致性,
總的來說,事務就是是一個操作序列,這些操作要么都執行,要么都不執行,它是一個不可分割的作業單位,
二、事務的ACID特點
ACID,是指在可靠資料庫管理系統(DBMS)中,事務(transaction)應該具有的四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability),這是可靠資料庫所應具備的幾個特性,
2.1原子性
指事務是一個不可再分割的作業單位,事務中的操作要么都發生,要么都不發生,
事務是一個完整的操作,事務的各元素是不可分的,
事務中的所有元素必須作為一個整體提交或回滾,
如果事務中的任何元素失敗,則整個事務將失敗,
2.2一致性
指在事務開始之前和事務結束以后,資料庫的完整性約束沒有被破壞,
當事務完成時,資料必須處于一致狀態,
在事務開始前,資料庫中存盤的資料處于一致狀態,
在正在進行的事務中,資料可能處于不一致的狀態,
當事務成功完成時,資料必須再次回到已知的一致狀態,
2.3隔離性
指在并發環境中,當不同的事務同時操縱相同的資料時,每個事務都有各自的完整資料空間,
對資料進行修改的所有并發事務是彼此隔離的,表明事務必須是獨立的,它不應以任何方式依賴于或影響其他事務,
修改資料的事務可在另一個使用相同資料的事務開始之前訪問這些資料,或者在另一個使用相同資料的事務結束之后訪問這些資料,
事務之間的相互影響分為幾種,分別為:
(1)臟讀:一個事務讀取了另一個事務未提交的資料,而這個資料是有可能回滾的,
(2)不可重復讀:一個事務內兩個相同的查詢卻回傳了不同資料,這是由于查詢時系統中其他事務修改的提交而引起的,
(3)幻讀:一個事務對一個表中的資料進行了修改,這種修改涉及到表中的全部資料行,同時,另一個事務也修改這個表中的資料,這種修改是向表中插入一行新資料,那么,操作前一個事務的用戶會發現表中還有沒有修改的資料行,就好象發生了幻覺一樣,
(4)丟失更新:兩個事務同時讀取同一條記錄,A先修改記錄,B也修改記錄(B不知道A修改過),B提交資料后B的修改結果覆寫了A的修改結果,
Mysql 及事物隔離級別:
(1)read_uncommitted : 讀取尚未提交的資料 :不解決臟讀
(2)read_committed:讀取已經提交的資料 :可以解決臟讀
(3)repeatable_read:重讀讀取:可以解決臟讀 和 不可重復讀 —mysql默認的
(4)serializable:串行化:可以解決 臟讀 不可重復讀 和 虛讀—相當于鎖表
mysql默認的事務處理級別是 repeatable read ,而Oracle和SQL Server是 read committed

(1)查詢全域事務隔離級別
show global variables like '%isolation%'; SELECT @@global.tx_isolation;

(2)查詢會話事務隔離級別
show session variables like '%isolation%'; SELECT @@session.tx_isolation; SELECT @@tx_isolation;

(3)設定全域事務隔離級別
set global transaction isolation level read committed;

(4)設定會話事務隔離級別
set session transaction isolation level read uncommitted;

2.4持久性
在事務完成以后,該事務所對資料庫所作的更改便持久的保存在資料庫之中,并不會被回滾,
指不管系統是否發生故障,事務處理的結果都是永久的,
一旦事務被提交,事務的效果會被永久地保留在資料庫中,
2.5總結
在事務管理中,原子性是基礎,隔離性是手段,一致性是目的,持久性是結果,
三、事務控制陳述句
- BEGIN 或 START TRANSACTION:顯式地開啟一個事務,
- COMMIT 或 COMMIT WORK:提交事務,并使已對資料庫進行的所有修改變為永久性的,
- ROLLBACK 或 ROLLBACK WORK:回滾會結束用戶的事務,并撤銷正在進行的所有未提交的修改,
- SAVEPOINT S1:使用 SAVEPOINT 允許在事務中創建一個回滾點,一個事務中可以有多個 SAVEPOINT;“S1”代表回滾點名稱,
- ROLLBACK TO [SAVEPOINT] S1:把事務回滾到標記點,
3.1測驗提交事務




3.2測驗回滾事務

3.3測驗多點回滾

![]()
四、使用 set 設定控制事務
SET AUTOCOMMIT=0; #禁止自動提交 SET AUTOCOMMIT=1; #開啟自動提交,Mysql默認為1 SHOW VARIABLES LIKE 'AUTOCOMMIT'; #查看Mysql中的AUTOCOMMIT值 如果沒有開啟自動提交,當前會話連接的mysql的所有操作都會當成一個事務直到你輸入rollback|commit,當前事務才算結束,當前事務結束前新的mysql連接時無法讀取到任何當前會話的操作結果, 如果開起了自動提交,mysql會把每個sql陳述句當成一個事務,然后自動的commit, 當然無論開啟與否,begin; commit|rollback; 都是獨立的事務,
4.1SET AUTOCOMMIT=0; #禁止自動提交

4.2SET AUTOCOMMIT=1; #開啟自動提交,Mysql默認為1

4.3測驗沒有開啟自動提交功能




轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538553.html
標籤:其他
上一篇:【機器學習】之第五章——神經網路
下一篇:低代碼相關概念及釘釘宜搭初使用
