程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySql中操作事務

MySql中操作事務

編輯:MySQL綜合教程

MySql中操作事務


假如我們有一個表,為account,其內容為:

ID NAME BALANCE 1 zhangsan 1000 2 lisi 1000

什麼是事務

比如支付寶轉賬!張三轉1000塊到李四的賬戶,這其實需要兩條SQL語句:

給張三的賬戶減去1000元;給李四的賬戶加上1000元。 如果在第一條SQL語句執行成功後,在執行第二條SQL語句之前,程序被中斷了(可能地下光纖被挖掘機挖斷了……確實存在的哦),那麼李四的賬戶沒有加上1000元,而張三卻減去了1000元。這肯定是不行的!
你現在可能已經知道什麼是事務了吧!事務中的多個操作,要麼完全成功,要麼完全失敗!不可能存在成功一半的情況!也就是說給張三的賬戶減去1000元如果成功了,那麼給李四的賬戶加上1000元的操作也必須是成功的;否則給張三減去1000元,以及給李四加上1000元都是失敗的!

事務的四大特性(ACID

原子性(Atomicity):事務中所有操作是不可再分割的原子單位。事務中所有操作要麼全部執行成功,要麼全部執行失敗。一致性(Consistency):事務執行後,數據庫狀態與其它業務規則保持一致。如轉賬業務,無論事務執行成功與否,參與轉賬的兩個賬號余額之和應該是不變的。隔離性(Isolation):隔離性是指在並發操作中,不同事務之間應該隔離開來,使每個並發中的事務不會相互干擾。持久性(Durability):一旦事務提交成功,事務中所有的數據操作都必須被持久化到數據庫中,即使提交事務後,數據庫馬上崩潰,在數據庫重啟時,也必須能保證通過某種機制恢復數據。

MySQL中的事務

在默認情況下,MySQL每執行一條SQL語句,都是一個單獨的事務。如果需要在一個事務中包含多條SQL語句,那麼需要開啟事務和結束事務。
開啟事務:start transaction;結束事務:commit或rollback。 在執行SQL語句之前,先執行start transaction,這就開啟了一個事務(事務的起點),然後可以去執行多條SQL語句,最後要結束事務,commit表示提交,即事務中的多條SQL語句所做出的影響會持久化到數據庫中。或者rollback,表示回滾,即回滾到事務的起點,之前做的所有操作都被撤消了!
下面演示zhangsan給lisi轉賬1000元的示例: 放棄事務,轉賬失敗:
START TRANSACTION;
UPDATE account SET balance=balance-1000 WHERE id=1;
UPDATE account SET balance=balance+1000 WHERE id=2;
ROLLBACK;

提交事務,轉賬成功:
START TRANSACTION;
UPDATE account SET balance=balance-1000 WHERE id=1;
UPDATE account SET balance=balance+1000 WHERE id=2;
COMMIT;

設置回滾點: 如下,第二條update語句失效後,便COMMIT,提交了事務。
START TRANSACTION;
UPDATE account SET balance=balance-1000 WHERE id=1;
SAVEPOINT rol_01;
UPDATE account SET balance=balance+1000 WHERE id=2;
ROLLBACK TO SAVEPOINT rol_01;
COMMIT;




---完---

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved