首先 你要了解 将事务改为手动提交 并控制事务的方式 如果不了解 可以先查看我的文章
MySQL事务基本操作(方式1)
然后我们来看表结构
我们有一张 staff 用户表
然后我们将 黄飞鸿 转10年时间给赵敏 简单说 逻辑有四个
第一步 查看黄飞鸿的年龄 确认他加十年不会超额
第二步 将黄飞鸿年龄加十岁
第三步 参看赵敏年龄不能小于10 不然减了就没了
第四步 将赵敏的年龄减十岁
但这个可能就会出现 黄飞鸿的年龄加了 赵敏的年龄没减 如果出现这种异常 那就出大事了 所以我们需要绑定事务
让这几步操作 要么一起成功 要么一起失败
接下来 我们来看手动事务控制的代码
这里 我们先将数据库的事务提交状态调回去 执行
set @@autocommit = 1;
我们的程序就执行成功了
然后我们查询一下
select @@autocommit;
我们现在查询到的状态就是 1 自动提交了
然后我们来通过手动开启事务的方式 完成上述逻辑
我们先执行
start transaction;
开启一个事务
然后我们再来执行事务中要进行的操作
select age from staff where name = "黄飞鸿";
UPDATE staff SET age = age + 10 WHERE name = "黄飞鸿";
select age from staff where name = "赵敏";
UPDATE staff SET age = age - 10 WHERE name = "赵敏";
然后我们查看表数据
可以看到 我们的数据还没有改变 因为事务操作还没有提交 数据不会发生真正的变化 只是存在了一个暂时的数据库里
如果事务没有报错 那就可以执行
commit;
把事务提交了 再去查看表数据
可以看到 我们的数据结构就完成了
如果sql报错了 就 可以执行
rollback;
回滚事务 这样就相当于什么都没发生过