您好,登錄后才能下訂單哦!
這篇文章主要介紹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中事務控制對的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。