Mysql 会导致锁表的语法

原创 2012年12月19日 10:52:36

最近再找一些Mysql锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新

笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我,方便大家。

此测试环境

Mysql 5.5 基于innodb 引擎


insert into  table1 values select  … from table2 ….

此种方法,会锁table2
delete table1  from table1 inner join table2  on table1.id=table2.id  …

此种方法,会锁table2
update tabel1,table2 set table1.name=’feie’ where table1.id=table2.id

此种方法,会锁table2
update tabel1,table2 set table1.name=’feie’ where table1.id=table2.id and table1.id=1;

此种方法,会锁table2.id=1的记录

-----------------------------------------第二次编辑分割线--------------------------------------

假设kid 是表table 的 一个索引字段 且值不唯一
1.如果kid 有多个值为12的记录那么:
update table  set name=’feie’ where kid=12;  
会锁表
2.如果kid有唯一的值为1的记录那么:
update table  set name=’feie’ where kid=1;  
不会锁
总结:用索引字段做为条件进行修改时, 是否表锁的取决于这个索引字段能否确定记录唯一,当索引值对应记录不唯一,会进行锁表,相反则行锁。

如果有两个delete

kid1 与 kid2是索引字段
语句1 delete from table where  kid1=1 and kid2=2;
语句2 delete from table where  kid1=1 and kid2=3;
这样的两个delete 是不会锁表的
语句1 delete from table where  kid1=1 and kid2=2;
语句2 delete from table where  kid1=1 ;
这样的两个delete 会锁表
总结:同一个表,如果进行删除操作时,尽量让删除条件统一,否则会相互影响造成锁表

mysql select是否会锁表 ?

mysql select是否会锁表 ?   有的人说mysql的 select 会锁表 ,有的人说 mysql 的查询不会锁表 。 其他他们都对,没有 ,但是很片面。   其...
  • caomiao2006
  • caomiao2006
  • 2016-07-31 21:22:43
  • 5069

MySQL锁表解决方法(转)

MySQL锁表解决方法 一、我的处理过程 1、查进程,主要是查找被锁表的那个进程的ID SHOW PROCESSLIST; 2、kill掉锁表的进程ID KILL   10866;//后...
  • xxmzumeng
  • xxmzumeng
  • 2014-07-16 18:32:47
  • 67382

关于两个update语句互相死锁的显现,加深我们对锁的了解

前段时间在msdn的论坛上看到邹老大对一个问题的回复,觉得对锁更了解了,先二话不说“拿来”记录学习下。 原帖地址:http://social.msdn.microsoft.com/Forums/zh...
  • starseeker7
  • starseeker7
  • 2014-06-05 15:45:02
  • 7371

使用for update锁表的解决办法(转)

今天使用select * from bd_corp for update改了好几次之后,突然执行N长时间都不行,马上给用友打电话,我听到了“锁表”两个字。 马上查询百度。 们在操作...
  • u013760858
  • u013760858
  • 2014-10-21 16:08:22
  • 7060

锁表原因及解决思路

1、锁表发生在insert  update 、delete 中    2、锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回滚 或者退出数据库...
  • u011194983
  • u011194983
  • 2016-10-26 09:16:18
  • 8392

数据库 for update 锁表的问题

Oracle 的for update行锁 键字: oracle 的for update行锁    SELECT...FOR UPDATE 语句的语法如下:    SELECT ... FOR UP...
  • fayeyiwang
  • fayeyiwang
  • 2016-03-31 13:08:28
  • 7698

mysql(五)forupdate语句锁表的细节

我们都知道for update语句会锁住一张表,锁表的细节很多人却不太清楚,下面我们举例看下。 在表上我们有个索引,如下: 现在在我们通过索引store_id锁表: 我们再开一个客户端,还是锁住同一个...
  • lz710117239
  • lz710117239
  • 2017-05-12 20:33:10
  • 3067

定时任务update锁表问题

今天用Quartz搞一个定时查询并更新表的Job。碰到一个更新总是锁表的问题。直到现在还不明白。最后把执行的操作都放到一个事务中,在执行外用com.commit()为提交,解决了问题,操作不再锁表。今...
  • louhui_2005
  • louhui_2005
  • 2009-03-22 01:08:00
  • 2438

高并发update的 死锁产生原因

在说这个之前首先了解一下讲一下update语句sql中的情况。死锁产生的条件:出现循环等待资源。update对锁的流程:       当sql发出一个update请求之后,数据库会对表中的每条记录加上...
  • zc474235918
  • zc474235918
  • 2016-01-20 16:58:14
  • 14768

Mysql update 子查询锁表问题。

今天碰到诡异的表死锁问题。 首先Tomcat报错: Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackExcep...
  • vargas
  • vargas
  • 2015-01-09 18:06:40
  • 2848
收藏助手
不良信息举报
您举报文章:Mysql 会导致锁表的语法
举报原因:
原因补充:

(最多只允许输入30个字)