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到了这条数据,进行修改。
操作:使用乐观锁(实现方式有两种,版本号或者时间戳)
下班,晚上继续搞起。
上一篇: 野指针和常见内存错误
下一篇: 子婴跟秦始皇到底是什么关系?真相是什么