“这是我参与更文挑战的第1天,活动详情查看: 更文挑战”
ACID分别是 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、 持久性(Durability)
概念的东西就不在赘述了,最近遇到一些关于事务隔离性的问题。
简单回顾一下关于事务隔离特性的几个级别
read uncommitted(读未提交) 、read committed(读提交) 、repeatable read(重复读) 、Serializable(序列化)
查看当前数据库事务隔离级别 select @@transaction_isolation;
参考文献:dev.mysql.com/doc/refman/…
简单讨论一下几个关于隔离特性的几个问题
问题1 可重复指的是什么?
在同一个事务中同一条查询语句返回的结果是相同的。不受其他事务影响。
问题2 在同一个事务中如果amount发生了update或insert操作,事务在未提交前查询返回的结果是否是更新后或插入后的结果?为什么? 答案:会读取到更新或插入后的结果。这是因为select 读取数据有个两种模式,如果不加锁的模式为快照读 ,如果添加锁(lock in share mode,for update)为当前读。
问题3 事务中快照读和当前读分别怎样解决重复读级别下幻读问题的?
mvcc和next-key锁
问题4 两个事务中都没有提交情况下,每个事务中分别执行insert语句 执行顺序对最后表中结果有什么影响?为什么?
表会按照执行insert顺序记录。对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X)
看到这里如果还不太明白,下一篇带你了解MYSQL锁的文章肯定让你豁然开朗。