SQL--事務


SQL--事務

博客說明

文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗匯總,如有什么地方侵權,請聯系本人刪除,謝謝!

概念

如果一個包含多個步驟的業務操作,被事務管理,那么這些操作要么同時成功,要么同時失敗

操作

1. 開啟事務: start transaction;
2. 回滾:rollback;
3. 提交:commit;

案例

	CREATE TABLE account (
			id INT PRIMARY KEY AUTO_INCREMENT,
			NAME VARCHAR(10),
			balance DOUBLE
		);
		-- 添加數據
		INSERT INTO account (NAME, balance) VALUES ('zhangsan', 1000), ('lisi', 1000);
		SELECT * FROM account;
		UPDATE account SET balance = 1000;
		-- 張三給李四轉賬 500 元
		
		-- 0. 開啟事務
		START TRANSACTION;
		-- 1. 張三賬戶 -500
		
		UPDATE account SET balance = balance - 500 WHERE NAME = 'zhangsan';
		-- 2. 李四賬戶 +500
		-- 出錯了...
		UPDATE account SET balance = balance + 500 WHERE NAME = 'lisi';
		
		-- 發現執行沒有問題,提交事務
		COMMIT;
		
		-- 發現出問題了,回滾事務
		ROLLBACK;

事務的四大特征

  1. 原子性:是不可分割的最小操作單位,要么同時成功,要么同時失敗。
  2. 持久性:當事務提交或回滾后,數據庫會持久化的保存數據。
  3. 隔離性:多個事務之間。相互獨立。
  4. 一致性:事務操作前后,數據總量不變

事務的隔離級別(了解)

  • 概念:多個事務之間隔離的,相互獨立的。但是如果多個事務操作同一批數據,則會引發一些問題,設置不同的隔離級別就可以解決這些問題。

  • 存在問題:

    1. 臟讀:一個事務,讀取到另一個事務中沒有提交的數據
    2. 不可重復讀(虛讀):在同一個事務中,兩次讀取到的數據不一樣。
    3. 幻讀:一個事務操作(DML)數據表中所有記錄,另一個事務添加了一條數據,則第一個事務查詢不到自己的修改。
  • 隔離級別:

    1. read uncommitted:讀未提交
      • 產生的問題:臟讀、不可重復讀、幻讀
    2. read committed:讀已提交 (Oracle)
      • 產生的問題:不可重復讀、幻讀
    3. repeatable read:可重復讀 (MySQL默認)
      • 產生的問題:幻讀
    4. serializable:串行化
      • 可以解決所有的問題
    • 注意:隔離級別從小到大安全性越來越高,但是效率越來越低
    • 數據庫查詢隔離級別:
      • select @@tx_isolation;
    • 數據庫設置隔離級別:
      • set global transaction isolation level 級別字符串;

感謝

黑馬程序員

以及勤勞的自己
關注公眾號: 歸子莫,獲取更多的資料,還有更長的學習計划


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM