【Mysql篇】Mysql的隔离级别,以及存在的并发事务问题

  • Post author:
  • Post category:mysql




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 版权协议,转载请附上原文出处链接和本声明。