悲观锁和乐观锁是不是mysql数据库默认带的锁
5条回答 默认 最新
- 规则边缘 2021-03-08 10:35关注
1. 锁机制主要是针对读写操作的原子性。
2. 假设有两个事务执行同样的操作,读取数据、对数据进行处理、写入数据。事务A执行{读取数据},切换为事务B执行{读取数据、对数据进行处理、写入数据}。再切回事务A执行{对数据进行处理、写入数据}。就会发现事务A把事务B的操作覆盖掉了。
3. 悲观锁就是悲观的认为上述冲突发生的概率较高,就是事务在执行{读取数据}操作时,就对【数据】进行{加锁}操作,不允许其它事务去执行{加锁,写入数据}的操作。{加锁}操作是需要耗费资源的,如果冲突发生的概率较低,是不划算的。MySQL的加锁{悲观锁}操作可以通过select .... for update语法实现。
4. 乐观锁是乐观的认为上述冲突发生的概率较低,就是在表中约定一个版本标志字段,每次变更时去修改这个版本标志(可以是一个递增版本号,也可以是时间戳)。每个事务执行{读取数据}操作时,会读取到这个字段,执行{写入数据}操作时,判断版本标志是否发生改变(通过where条件判断即可),如果有变更,应用程序就重新执行{读取数据、对数据进行处理、写入数据}操作或者退出。MySQL本事是没有乐观锁这个概念的,需要应用程序自己去实现。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 CSS实现渐隐虚线框
- ¥15 有没有帮写代码做实验仿真的
- ¥30 vmware exsi重置后登不上
- ¥15 易盾点选的cb参数怎么解啊
- ¥15 MATLAB运行显示错误,如何解决?
- ¥15 c++头文件不能识别CDialog
- ¥15 Excel发现不可读取的内容
- ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
- ¥20 yolov5自定义Prune报错,如何解决?
- ¥15 电磁场的matlab仿真