MySQL-事务特性ACID你真的懂吗?

ACID分别是 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

概念的东西就不在赘述了,最近遇到一个关于事务隔离性的问题。

简单回顾一下关于事务隔离特性的几个级别

read uncommitted(读未提交) 、read committed(读提交) 、repeatable read(重复读) 、Serializable(序列化)

查看当前数据库事务隔离级别 select @@transaction_isolation;

MySQL-事务特性ACID你真的懂吗?_第1张图片

参考文献:MySQL :: MySQL 8.0 Reference Manual :: 13.3.7 SET TRANSACTION Statement

简单讨论一下几个关于隔离特性的几个问题

问题1 可重复读指的是什么?

在同一个事务中同一条查询语句返回的结果是相同的。不受其他事务影响。

MySQL-事务特性ACID你真的懂吗?_第2张图片

问题2  在同一个事务中如果amount发生了update或insert操作,事务在未提交前查询返回的结果是否是更新后或插入后的结果?为什么?
答案:会 读取到后更新或插入后的结果。这是因为select 读取数据有个两种模式,如果不加锁的模式为快照读 ,如果添加锁(lock in share mode,for update)为当前读。

MySQL-事务特性ACID你真的懂吗?_第3张图片

MySQL-事务特性ACID你真的懂吗?_第4张图片

问题3 事务中快照读和当前读分别怎样解决重复读级别下幻读问题的?

mvcc和next-key锁

MySQL 到底是怎么解决幻读的?-CSDN论坛

问题4 两个事务中都没有提交情况下,每个事务中分别执行insert语句 执行顺序对最后表中结果有什么影响?为什么?

表会按照执行insert顺序记录。对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X)

MySQL-事务特性ACID你真的懂吗?_第5张图片

看到这里你可能还是不太明白,如果你读完下一篇MYSQL锁的文章你自然就明白了。

你可能感兴趣的:(mysql,mysql,数据库,database)