手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

MySQL事务处理实现方法步骤

[日期:2017-03-24] 来源:Linux社区  作者:tenderrain [字体: ]

需求说明:
案例背景:银行的转账过程中,发生意外是在所难免。为了避免意外而造成不必要的损失,使用事务处理的方式进行处理:
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创建数据表的解释

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-03/142144.htm

linux
相关资讯       MySQL事务处理 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款