目录
Mysql的隔离级别,以及存在的并发事务问题
1. 数据库在并发情况下的常见操作
1. 读-读
不存在任何问题,也不需要并发控制
2. 读-写
有线程安全问题,可能会造成事务隔离性问题,可能遇到
脏读
、
不可重复读
、
幻读
3. 写-写
有线程安全问题,可能会存在
更新丢失问题
2. Mysql的隔离级别以及解决的问题
1. READ-UNCOMMITTED(读未提交)
可能导致的问题:
脏读
解决:用
行锁
,隔离级别升级,
读已提交
或以上
2. READ-COMMITTED(读已提交)
可能导致的问题:
不可重复读
解决:隔离级别升级,升级到
可重复读
或以上
3. REPEATABLE-READ(可重复读,默认隔离级别)
可能导致的问题:
幻读
有疑问:有人说,在innodb存储引擎下,默认开启间隙锁,是能解决幻读的问题的
解决:隔离级别升级,升级到
串行化
定义:可重复读指的是在一个事务里,我两次select查询到的数据应该是一样的
4. SERIALIZABLE(串行化)
可避免幻读。
读加共享锁,写加排他锁
。这样读取事务可以并发,但是读写,写写事务之间都是互斥的
3. 问:不可重复读和幻读的区别是什么?
维度不同,不可重复读是针对某个数据来说的,幻读针对某一行来说的
-
不可重复读侧重于
update
这种操作,同一条数据前后读起来不一样的情况, -
幻读侧重于
insert
、
delete
这种操作,前后两次select 数据的数量会发生变化
版权声明:本文为weixin_45325628原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。