標籤:使用者 nbsp blog tail 代碼 copy mysq comm href
需求說明:
案例背景:銀行的轉賬過程中,發生意外是在所難免。為了避免意外而造成不必要的損失,使用交易處理的方式進行處理:
A賬戶現有餘額1000元,向餘額為200的B賬戶進行轉賬500元。可能由於某原因:
A賬戶在扣除轉賬金額時發生錯誤,使用交易回復來返回到初始狀態
A賬戶成功扣除轉賬金額後,B賬戶添加轉賬金額發生錯誤,使用交易回復到初始狀態
提示:先建資料表account,欄位包括姓名(username)、餘額(money),再分別利用交易處理以上兩種情況。
[sql] view plain copy
- #建立賬戶表
- 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;
MySQL交易處理實現方法步驟