事务测试转账

事务思路图:

 1 -- mysql 是默认开启事务自动提交的
 2 SET autocommit=0 -- 关闭
 3 SET autocommit=1 -- 开启(默认的)
 4 
 5 -- 手动处理事务
 6 START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务内
 7 
 8 INSERT xxx
 9 INSERT xxx
10 
11 -- 提交:持久化(成功)
12 COMMIT 
13 -- 回滚:回到原来的样子(失败)
14 ROLLBACK
15 
16 -- 事务结束
17 SET autocommit=1 -- 开启自动提交
18 
19 -- 了解
20 SAVEPOINT 保存点名 -- 设置一个事务的保存点   比如小时候玩游戏,死了之后又从死的那一关开始玩
21 ROLLBACK TO SAVEPOINT 保存点名 -- 回滚到保存点
22 RELEASE SAVEPOINT 保存点名 -- 撤销保存点

模拟转账:

 1 CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci
 2 USE shop
 3 CREATE TABLE man (
 4  `id` INT(3) NOT NULL AUTO_INCREMENT,
 5  `name` VARCHAR(20) NOT NULL,
 6  `money` DECIMAL(9,2) NOT NULL,
 7  PRIMARY KEY (`id`)
 8  )
 9  
10  INSERT INTO man (`name`,`money`)
11  VALUES ('a',2000.000),
12  ('b',10000.00)
13 
14 -- 模拟转账:事务
15 SET autocommit = 0  -- 关闭自动提交
16 START TRANSACTION -- 开启一个事务
17 
18 UPDATE man SET money=money-500 WHERE `name`='a'   -- a 减500
19 UPDATE man SET money=money+500 WHERE `name`='b'   -- b 加500
20  
21 COMMIT  -- 事务提交  一致性,事务一但提交不可逆
22 ROLLBACK -- 事务回滚
23 
24 SET autocommit = 1  -- 打开自动提交
原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14763912.html