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语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我...
  • truelove12358
  • truelove12358
  • 2016年11月22日 16:47
  • 814

mysql 锁表详解

为了给高并发情况下的MySQL进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。 一、概述 MySQL有三种锁的级别:页级、表级、行级。 MyISAM和MEMORY存储引擎采用的是表...
  • g_hongjin
  • g_hongjin
  • 2016年06月17日 09:50
  • 2266

Mysql 会导致锁表的语法

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

mysql select是否会锁表 ?

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

MySql中表锁Lock命令和unlock命令

MySQL LOCK 命令的语法如下 LOCK TABLE table1 locktype, table2 locktype ... 对一个表解锁: UNLOCK TABLE[S] ...
  • caomiao2006
  • caomiao2006
  • 2016年07月31日 20:27
  • 3970

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

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

关于mysql锁表的几种形式

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数...
  • q959249819
  • q959249819
  • 2016年04月26日 09:51
  • 4139

MySQL insert into ... select 的锁情况 【转】

文章来源:关于MySQL insert into ... select 的锁情况 摘要:       一直以为"insert into tb select * from tbx" 这样的导入操...
  • woshizhangliang999
  • woshizhangliang999
  • 2016年12月16日 15:37
  • 3075

mysql 5.6 创建索引导致表锁阻塞查询

今天遇到一个表锁,对表进行select操作阻塞,最后发现在表操作时的时候执行了创建索引,导致整个表锁了 测试如下:              1.先执行一个慢查询               m...
  • weiwangsisoftstone
  • weiwangsisoftstone
  • 2017年07月14日 14:23
  • 2171

mysql序列引发的锁问题

今 天处理一个mysql序列,结果发现两个事物同时开启会出现并发的情况,查出的序列是相同的。 以下为还原步骤: 1 创建表: CREATE TABLE `tb_sequence` (   `n...
  • liuaixi200
  • liuaixi200
  • 2018年01月12日 15:57
  • 32
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mysql 会导致锁表的语法
举报原因:
原因补充:

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