阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL事务处理实现方法步骤

110次阅读
没有评论

共计 1204 个字符,预计需要花费 4 分钟才能阅读完成。

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

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计1204字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中