1、事务更新丢失
a,两个事务同时更新一条记录,那其中一个事务所做的修改将被另一个事务所覆盖;
b,两个事务同时更新一条记录,如果事务一提交了,而事务二却回滚了,那事务一的提交将因为事务二的回滚而失效。
2、事务更新丢失解决方法
事务1查询记录1同时加上排他锁for update
3、事务类别
扁平事务
带有保存点的扁平事务
链事务
嵌套事务
分布式事务
3.1 扁平事务
最常用的事务,begin...commit...rollback
缺点:不能提交或回滚事务的某一部分
3.2 带有保存点的扁平事务
解决扁平事务不能部分提交回滚的问题
begin...save1...rollback 1
缺点:当系统崩溃时,所有保存点都消失
3.3 链事务
解决了带保存点事务系统崩溃保存点消失的问题
缺点:回滚只能回滚最近一个保存点
3.2 嵌套事务 (mysql不支持)
任何子事务都在顶层事务提交后才真正提交,任意一个事务回滚会引起它的所有子事务一同回滚,子事务不具有持久性。
mysql并不原生支持嵌套事务,当执行一个START TRANSACTION指令时,会隐式的执行一个commit操作。用户需要通过带有保存点的事务来模拟串行的嵌套事务。https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html
3.3 分布式事务 (mysql只能使用最高级隔离级别serializable)
在分布式环境下运行的扁平事务,serializable隔离级别下innodb会对每个select语句后自动加上lock in share mode共享锁
来自anson博客