美文网首页
mysql锁与事物隔离级别

mysql锁与事物隔离级别

作者: 韩小禹 | 来源:发表于2021-04-22 21:43 被阅读0次

    锁的定义

    • 锁是计算机协调多个进程或线程并发访问某一资源的机制

    锁分类

    • 性能:乐观锁与悲观锁
    • 操作:读锁和写锁(都属于悲观锁)
    • 粒度:表锁和行锁(MyISAM, Innodb)

    行锁

    • 开销大
    • 加锁慢
    • 会出现死锁
    • 锁定力度小
    • 并发高
    • 偏向innodb引擎
    • 发生锁冲突概率最低
    • 事物是默认加行锁,在不提交时,始终会锁住。

    事物与ACID属性

    • 原子性
    • 一致性
    • 隔离性
    • 持久性

    并发事物带来的问题

    • 更新丢失
      • 两个事物同时操作相同数据,后提交的事物会覆盖先提交的事物处理结果,通过乐观锁就可以解决。
    • 脏读
      • 事物A读取到了事物B已经修改但尚未提交的数据,如果事物B回滚,事物A读取的数据则无效,不符合一致性
    • 不可重读
      • 事物A读取到了事物B已经提交的修改数据,不符合隔离性
    • 幻读
      • 事物A读取到了事物B提交的新增数据,不符合隔离性

    事物隔离级别

    • 查看数据库事物隔离级别:show variables like 'tx_isolation';
    • 设置数据库隔离级别:set tx_isolation='REPEATABLE-READ';
    • 默认的事物隔离级别时‘可重复读’
    隔离级别 | 脏读 | 不可重复读 | 幻读
    ---|---|---|---
    读未提交(read uncommitted) | 可能| 可能| 可能
    读已提交(read committed) | 不可能| 可能| 可能
    可重复读(repeatable read) | 不可能| 不可能| 可能
    可串行化(serializable) | 不可能| 不可能| 不可能
    
    • 但是“可串行化”效率底下,一般不使用
    • 幻读是从快照中读取,从数据中更新

    相关文章

      网友评论

          本文标题:mysql锁与事物隔离级别

          本文链接:https://www.haomeiwen.com/subject/lktqrltx.html