JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

mysql的锁机制

wys521 2024-11-21 22:23:59 精选教程 20 ℃ 0 评论

一、创建相应的表结构

二、当where中的条件是非主键的形式,会导致表锁,其他所有的操作都无法进行

  • 通过show processlist;可以看出有其中一条进程在更新数据

二、为数据库行加锁

select * from test_table where pid=1 for update;使用for update添加了锁,导致了其他事物无法进行更新update test_table set name='uu' where pid=1;

三、间隙锁

间隙锁基于非唯一索引,它锁定一段范围内的索引记录。间隙锁基于下面将会提到的Next-Key Locking 算法,请务必牢记:使用间隙锁锁住的是一个区间,而不仅仅是这个区间中的每一条数据。

  • select * from test_table where pid between 1 and 5 for update;
  • 会把不存在的数据同时加上锁,但是插入数据pid=4的插入失败
  • insert into test_table values(6,'gg',4);执行失败
  • 不在1到5的范围内则插入成功,insert into test_table values(6,'gg',9);执行成功

mysql出现死锁的解决方案

  • 等待, 直到超时(innodb_lock_wait_timeout=50s) 。
  • 发起死锁检测, 主动回滚一条事务, 让其他事务继续执行(innodb_deadlock_detect=on) 。

由于性能原因, 一般都是使用死锁检测来进行处理死锁

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表