共計 1817 個字符,預計需要花費 5 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章主要介紹 MySQL 中事務控制對的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
什么是事務控制
事務是指作為一個邏輯工作單元執行的一系列操作,這些操作要么全部成功,要么全部失敗。事務確保了多個數據的修改作為一個單元來處理。
在 MySQL 中,只有使用了 Innodb 存儲引擎的數據庫或表才支持事物
事務用于維護數據庫的完整性,保證成批的 sql 語句要么都執行,要么都不執行
事務用于管理 INSERT、UPDATE 和 DELETE 語句
假如,張三在 ATM 機上給李四轉賬 100 元,在銀行的業務系統中,主要會執行兩步數據變更操作:
從張三的賬戶減去 100 元
給李四的賬戶增加 100 元
試問,如果操作 1 執行成功,操作 2 執行失敗會發生什么?
事務的四個特性
如果某個數據庫支持事務,那么該數據庫必須具備 ACID 四個特性,即 Atomicity(原子性)、Consistency(一致性)、Isolation(隔離性)、Durability(持久性)。
原子性:事務必須是原子工作單元,事務中包含的各操作要么都做,要么都不做
一致性:事務在執行完成時,必須使所有的數據都保持一致狀態
隔離性:事務獨立運行。多個事務之間相互隔離,互不干擾。事務的 100% 隔離,會犧牲速度
持續性:事務執行完成之后,它對系統的影響是永久性的
MySQL 的事務控制
在默認情況下,MySQL 是自動提交事務的,即每一條 INSERT、UPDATE、DELETE 的 SQL 語句提交后會立即執行 COMMIT 操作。因此,要開啟一個事務,可以使用 start transaction 或 begin,或者將 autocommit 的值設置為 0.
方法一:
方法二:
例子
登陸數據庫,使用 student 數據庫并查看所有的數據表
USE student;SHOW TABLES;
2. 創建 bank_account 數據表并插入兩條記錄,設置張三的 balance 字段值 +1000
CREATE TABLE bank_account(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) COMMENT 姓名 ,
balance DECIMAL(18, 2) COMMENT 賬戶余額 INSERT INTO bank_account(id, name, balance) VALUE(1, 張三 , 0);INSERT INTO bank_account(id, name, balance) VALUE(2, 李四 , 0);UPDATE bank_account SET balance = balance + 1000 WHERE id = 1;
3. 查看默認的 autocommit 值
SELECT @@autocommit;
4. 查看 bank_account 數據表所有記錄
SELECT * FROM bank_account;
5. 開始事務控制并執行兩條 SQL 語句
START TRANSACTION;UPDATE bank_account SET balance = balance - 100 WHERE id = 1;UPDATE bank_account SET balance = balance + 100 WHERE id = 2;COMMIT;
6. 查看此時數據表的內容
SELECT * FROM bank_account;
7. 再次開始事務控制,同樣插入兩條一樣的 SQL 語句,但將 commit(提交) 變為 rollback(回滾)
START TRANSACTION;UPDATE bank_account SET balance = balance - 100 WHERE id = 1;UPDATE bank_account SET balance = balance + 100 WHERE id = 2;ROLLBACK;
8. 再次查看數據表內容,發現回滾之后數據無變化
SELECT * FROM bank_account;
注:本文是博主 MySQL 學習的總結,不支持任何商用,轉載請注明出處!如果你也對 MySQL 學習有一定的興趣和理解,歡迎隨時找博主交流~
以上是“MySQL 中事務控制對的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!
向 AI 問一下細節