Page

【Mysql】Mysql中的事务丢失更新,事务类别

992Anson20-08-02


【Mysql】Mysql中的事务丢失更新,事务类别

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博客 

http://www.tp0.top