美文网首页
mysql事务隔离和锁

mysql事务隔离和锁

作者: Ylm007 | 来源:发表于2020-05-18 23:42 被阅读0次
  1. 三种事务bug问题理解
  • 脏读:读到其他事务未提交的数据;
  • 不可重复读:事务内,相同的where条件,select/update/delete查询结果不一致;
  • 幻读:事务内,相同的where条件,insert导致的查询结果不一致;
  • 更新丢失:
  1. mysql的mvcc解决方案
  • rc级别-读提交:
    • redo.log保证只有事务提交后,修改结果才可见,解决脏读;
    • 针对当前读,RC隔离级别保证对读取到的记录加锁 (行锁),存在幻读现象;
    • select/update/delete/insert都是当前读,读结果可能不一致,存在不可重复读问题;
  • rr级别-可重复读:
    • 针对当前读,RR隔离级别保证对读取到的记录加锁 (记录锁),同时保证对读取的范围加锁,新的满足查询条件的记录不能够插入 (间隙锁),不存在幻读现象;
    • 针对快照读,普通select并不会加锁,因此select和update读的结果也可能不一致!也存在不可重复读问题;
  • Serializable级别 从MVCC并发控制退化为基于锁的并发控制。不区别快照读与当前读,所有的读操作均为当前读,读加读锁 (S锁),写加写锁 (X锁)
  1. 基于锁的并发控制,Lock-Based Concurrency Control
  • vs 不可重复读,rc隔离级别已经解决脏读问题,试图解决不可重复读问题;for update 锁定当前读,属于精准匹配锁定,锁定行不可修改,但不能解决幻读问题;
  • vs 幻读,rr隔离级别,试图解决幻读问题,for update锁定索引行+gap锁,可以解决幻读问题;
  1. 理解快照读和当前读
  • rr不带锁的查询(select)读快照,rc不带锁读当前;
  • (select for update/update/delete)带锁的查询读最新(读当前)
  1. 理解rc和rr的差异
  • rc下的锁,锁定精确匹配行;rr下的锁,锁定索引+gap锁,锁定的范围广且重,有时候这并不一定是想要;
  • rc下的读快照,每次都读最新的ReadView,也就是最新已事务提交的数据,因此不可重复读;rr下的读快照是可重复读,重复第一条select读时生成ReadView,因此可重复读;
  • 思考,虽然可重复读,但是
A1
select * from user where id=1;
-- effect 0 不存在id=1的记录
A2 
update set age=18 where id=1;
B1
update set age=19 where id=1;
-- rr模式下,id=1被锁定,B1被阻塞;rc模式下,不存在匹配行,B1不会被阻塞;
A3 
commit
  1. 最佳实践
  • 只要锁多行,就有可能发生死锁,但是只要保证锁定表顺序是一致的就可以避免死锁;
  • 顺上,锁定表内有不同行的锁定,也是容易发生死锁的;
  • rc+强制读当前+锁,可重复读;
  • rr+强制读当前+锁,完全避免幻读;
  • 因地制宜;
  1. 共享锁
  • 共享锁
  1. 思考
  • rr下,可重复读是指两次select快照读,其他都是读当前,快照读是不准确的,有啥用呢?。

参考:https://www.cnblogs.com/crazylqy/p/7611069.html

相关文章

  • MySQL相关(一)——— 事务和锁

    事务的隔离级别和锁机制 【1】InnoDB 事务隔离级别和锁 【2】脏读、不可重复读、幻读 mysql 相关 常用...

  • Mysql 隔离级别与锁的关系

    Innodb中的事务隔离级别和锁的关系MySQL加锁处理分析

  • Mysql 事务

    IBM MySQL 事务隔离级别和锁[https://developer.ibm.com/zh/articles/...

  • mysql事务隔离和锁

    三种事务bug问题理解 脏读:读到其他事务未提交的数据; 不可重复读:事务内,相同的where条件,select/...

  • MYSQL事务

    常用语句 MYSQL事务,锁表 事务控制语句 事务的隔离级别 隔离级别描述产生风险READUNCOMMITTED ...

  • 收藏-MySQL

    # MySQL的并发控制与加锁分析# MySQL的四种事务隔离级别# mysql共享锁与排他锁

  • mysql锁、事务、隔离

    连接池 与用户请求建立连接 核心功能层 查询解析,分析,优化,内置函数,跨存储引擎的功能 存储引擎层 数据的存入...

  • 数据库事务和锁

    参考链接:MySQL中Innodb的事务隔离级别和锁的关系 1. 事务 事务:事务是作为单个逻辑单元工作执行的一些...

  • mysql事务隔离级别和锁

    事务的四种隔离级别 锁的使用注意点 1、未开启事务时,InnoDB默认为增/删/改开启事务(开启事务可以认为有对应...

  • mysql的锁和mvcc

    mysql的事物隔离级别由锁和mvcc相互配合形成 事务的 ACID 事务具有四个特征:原子性( Atomicit...

网友评论

      本文标题:mysql事务隔离和锁

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