Mysql 会导致锁表的语法

转载 2015年11月18日 14:09:11

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

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

此测试环境

Mysql 5.5 基于innodb 引擎


  1. insert into  table1 values select  … from table2 ….  

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

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

此种方法,会锁table2
  1. 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 会导致锁表的语法-线上问题常有

最近再找一些Mysql锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我...

mysql select是否会锁表

有的人说mysql的 select 会锁表 ,有的人说 mysql 的查询不会锁表 。 其他他们都对,没有 ,但是很片面。 其实对于mysql的select 是否会锁表 ,这个完全取决于表采用...
  • LvanNeo
  • LvanNeo
  • 2014年09月24日 09:30
  • 3488

Mysql新增字段到大数据表导致锁表

年初跳完槽,终于可以安心开始写一些博客了。进入新的公司,还是有蛮多收获的。那就先记一个昨天遇到的问题吧。      昨天晚上7点左右,对一张表进行加字段,大概200多万条记录,字段90多个的大表,结...

MySQL锁表解决方法(转)

MySQL锁表解决方法 一、我的处理过程 1、查进程,主要是查找被锁表的那个进程的ID SHOW PROCESSLIST; 2、kill掉锁表的进程ID KILL   10866;//后...

mysql 严重锁表解决方案

今天是我在小省网值班。一来到就是这个问题。关于锁表的问题,以下脚本已经部署到揭阳和梅州两个地市,暂时可以临时解决,但是治标不治本。 处理方式: 1.  检查有多少sleep/lock进程:      ...

关于MYSQL Innodb 锁行还是锁表

关于mysql的锁行还是锁表,这个问题,今天算是有了一点头绪,mysql 中 innodb是锁行的,但是项目中居然出现了死锁,锁表的情况。为什么呢?先看一下这篇文章。   做项目时由于业务...

并发控制 mysql InnoDB锁表,事务及处理方法

InnoDB锁问题 InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION);二是采用了行级锁。行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题。下面...

mysql之锁表机制与死锁浅谈

MySQL锁定机制简介 数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制,所以MySQL...
  • luyaran
  • luyaran
  • 2016年12月07日 10:55
  • 555

MySQL锁表

1、锁:计算机协调多个进程或线程并发访问某一资源的机制​2、MySQL锁:不同的存储引擎支持不同的锁机制​1)页级锁:引擎DBD(也支持表级锁)​开销和枷锁时间结余表锁和行锁间;会出现死锁;锁定力度介...

mysql的锁表问题

SHOW PROCESSLIST查看数据库中表的状态,是否被锁; kill id   //杀掉被锁的表 ==============================================...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mysql 会导致锁表的语法
举报原因:
原因补充:

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