您好,登錄后才能下訂單哦!
需求說明:
案例背景:銀行的轉賬過程中,發生意外是在所難免。為了避免意外而造成不必要的損失,使用事務處理的方式進行處理:
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創建數據表的解釋
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。