• Mysql中的读锁,写锁,乐观锁及事务隔离级别和并发问题


    mysql读锁,写锁,乐观锁

    读锁,也叫共享锁(shared lock)

    SELECT * FROM table_name  WHERE ...  LOCK IN SHARE MODE  

    写锁,也叫排他锁(exclusive lock)

    SELECT * FROM table_name WHERE ... FOR UPDATE

    乐观锁,是一种逻辑锁,通过数据的版本号(vesion)的机制来实现

    update t_goods
    set status=2,version=version+1
    where id=#{id} and version < #{version}; // 更新前将version自增

    读锁、写锁属于行级锁。即事务1 对商品A 获取写锁,和事务2 对商品B 获取写锁互相不会阻塞的。需要我们注意的是我们的SQL要合理使用索引,当我们的SQL 全表扫描的时候,行级锁会变成表锁,如果where条件中只用到主键或者唯一索引,则加的是行锁;否则加的是表锁

    lock in share mode适用于两张表存在业务关系时的一致性要求, for  update适用于操作同一张表时的一致性要求

    mqslq事务隔离级别和并发问题

    1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

    2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

    3、幻读:系统管理员A将数据库中所有学生的成绩根据具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

    小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

    mysql默认隔离级别是可重复读

    select @@global.tx_isolation

  • 相关阅读:
    vue的环境的搭建
    rem
    web前端面试题总结
    vue遇到的一些问题
    栅格布局的理解
    利用node的http模块创建一个简单的http服务器
    node 常用的一些终端的命令的快捷键
    node 环境变量设置方法
    CentOS7.5搭建Hadoop2.7.6完全分布式集群
    UUID做主键,好还是不好?这是个问题
  • 原文地址:https://www.cnblogs.com/moris5013/p/11130828.html
Copyright © 2020-2023  润新知