mysql 事务及断点
transaction
savepoint
有时候可能需要在mysql事务中部分提交一些sql命令,这时候断点就派上用场了。
比如:一个事务需要修改id=6的用户的用户名和email,但是事务执行过程中我又不想修改email内容了,这时候就需要只提交用户名的语句。
这里的两个sql语句:
-
修改用户名
update users set username='user6' where id=6;
-
修改用户邮箱
update users set email='user6@163.com' where id=6;
-
如果在事务中只想修改用户名、不想修改用户邮箱,看通过断点如何实现呢?
如下图所示,是操作的流程:
-
最后再一次查询该条记录,看一下结果:
从图中我们可以看到 该事务中只修改了用户名,没有修改email, 事务中通过 rollback to savepoint point1 来实现回滚 断点point1之后的语句,这样就达到了我们预期的效果了。
laravel框架支持事务嵌套,其实事务嵌套本身是通过这种断点机制来实现的。