欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL优化(9)-数据库中的锁

程序员文章站 2022-06-04 11:06:47
...

锁是啥?

看过我java并发系列的小伙伴请移步我的多线程并发中的锁。是解决执行多线程时用于强行限制资源访问的同步机制。

MySQL的锁干啥的?

简单说用来保证数据库完整性和一致性。

MySQL锁机制?

MySQL 默认InnoDB引擎和默认为行级锁行级锁又包括共享锁与排它锁

具体概念不多说,百度一堆。重点直接看实际场景应用

应用场景应用与分析(重点)

高并发下,多个用户修改同一条数据。

举例子:
        user表: id   name   age    tel    sex    city
                 1   tang    18   10086    1     bj

(1)现在两个用户A和B同时select到了这条数据,进行修改。 
    操作:无干预。

    结果:没有做任何干预,最后的数据是啥样的?
         以最后提交的为准(B),上一次的(A)操作不会对记录有修改。

    问题:A用户是不是会造成困扰,我刚刚吧名字改成tang1了啊,怎么会没反应呢?(如果你门的业务可以容忍这种情况请略过)


(2)还是两个用户A和B同时select到了这条数据,进行修改。 
    操作:使用悲观锁

    //1.查询出id=1的用户信息(for update 锁住id=1的用户信息)
    select age from user where id=1 for update; 
    //2.修改age
    update user set age=18;
   
    结果:后提交的要等待A提交完成功后才能提交。保证了A和B都能正确操作DB。但是缺点很明显啊(数据同步执行,吞吐量小,性能低)
    有没有更好的方式呢,引出第三点乐观锁
    
 (3)还是两个用户A和B同时select到了这条数据,进行修改。 
    操作:使用乐观锁(实现方式有两种,版本号或者时间戳)
    下班,晚上继续搞起。