標籤:mysql 事務
需求說明:
案例背景:銀行的轉賬過程中,發生意外是在所難免。為了避免意外而造成不必要的損失,使用交易處理的方式進行處理:
A賬戶現有餘額1000元,向餘額為200的B賬戶進行轉賬500元。可能由於某原因:
A賬戶在扣除轉賬金額時發生錯誤,使用交易回復來返回到初始狀態
A賬戶成功扣除轉賬金額後,B賬戶添加轉賬金額發生錯誤,使用交易回復到初始狀態
提示:先建資料表account,欄位包括姓名(username)、餘額(money),再分別利用交易處理以上兩種情況。
#建立賬戶表 CREATE TABLE IF NOT EXISTS account( id INT(11)NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(32)NOT NULL, money DECIMAL(9,2) )ENGINE=INNODB; #插入使用者資料 INSERT INTO account(username,money)VALUES(‘A‘,1000.00); INSERT INTO account(username,money)VALUES(‘B‘,200.00); /*交易處理*/ # A賬戶匯款失敗 SELECT * FROM account; #第一步 關閉事務自動認可模式 SET autocommit=0; #第二步 開始事務 START TRANSACTION; #第三步 發現匯款失敗,將交易回復ROLLBACK || 匯款成功將事件commit #假設語法錯誤 UPDATE account SET money=money-500 WHERE username=‘A‘; SELECT * FROM account; UPDATE account SET money=money+200 WHERE username=‘B‘; ROLLBACK; #第四步 還原Mysql資料庫的的自動認可 SET autocommit=1; SELECT * FROM account; /*B接收匯款失敗*/ SELECT *FROM account ; SET autocommit =0; START TRANSACTION; UPDATE account SET money=money-500 WHERE username=‘A‘; SELECT * FROM account ; #假設語法錯誤 UPDATE account SET money=money+200 WHERE username =‘B‘; ROLLBACK; SET autocommit =1; SELECT * FROM account; #清除資料 <pre name="code" class="sql">TRUNCATE account;
備忘:
使用IF NOT EXISTS建立資料表的解釋
MySQL交易處理實現方法步驟