mysql中update语句的锁
程序员文章站
2022-03-09 09:52:18
...
UPDATE rent_contacts SET contacts_mobile='11111' WHERE rent_unit_code in (SELECT rent_unit_code FROM rent_unit );
第一种情况: 条件无索引
sql一执行:
BEGIN;
UPDATE contacts SET mobile='11111' WHERE code in ('3424342' );
sql二执行 UPDATE contacts SET mobile='11111' WHERE code in ('1111' );
sql二执行受阻,sql一commit之后,sql二可执行成功
结论:条件无索引,锁表
第二种情况: 条件有索引,in语句是确定的值
sql一执行:
BEGIN;
UPDATE contacts SET mobile='11111' WHERE code in ('3424342' );
sql二执行 UPDATE contacts SET mobile='11111' WHERE code in ('1111' );
sql二正常执行,sql二不依赖sql一的commit
结论:条件有索引,锁行
第三种情况: 条件有索引,in语句是复杂查询
sql一执行:
BEGIN;
UPDATE contacts SET mobile='11111' WHERE code in ( select code from user where id=1);
sql二执行 UPDATE contacts SET mobile='11111' WHERE code in ('1111' );
sql二执行受阻,sql一commit,sql二正常执行
结论:条件有索引,in语句是不确定的值,锁表
第一种情况: 条件无索引
sql一执行:
BEGIN;
UPDATE contacts SET mobile='11111' WHERE code in ('3424342' );
sql二执行 UPDATE contacts SET mobile='11111' WHERE code in ('1111' );
sql二执行受阻,sql一commit之后,sql二可执行成功
结论:条件无索引,锁表
第二种情况: 条件有索引,in语句是确定的值
sql一执行:
BEGIN;
UPDATE contacts SET mobile='11111' WHERE code in ('3424342' );
sql二执行 UPDATE contacts SET mobile='11111' WHERE code in ('1111' );
sql二正常执行,sql二不依赖sql一的commit
结论:条件有索引,锁行
第三种情况: 条件有索引,in语句是复杂查询
sql一执行:
BEGIN;
UPDATE contacts SET mobile='11111' WHERE code in ( select code from user where id=1);
sql二执行 UPDATE contacts SET mobile='11111' WHERE code in ('1111' );
sql二执行受阻,sql一commit,sql二正常执行
结论:条件有索引,in语句是不确定的值,锁表
上一篇: 工作这么多年,发现自己是匆匆过客
下一篇: 博客123456
推荐阅读
-
mysql中游标在存储过程中的详细用法_MySQL
-
MySQL 5安装过程中遇到的问题的解决
-
影响MySQL中mysqld安全的四个选项_MySQL
-
简单谈谈PHP中的include、include_once、require以及require_once语句
-
实例详解MySQL中触发器的使用方法
-
load data infile将excel文件中的数百万条数据在1分钟内导入数据_MySQL
-
php mysql php mysql 判断update之后是否更新了的方法
-
详解SQL Server 2008中的联机事务处理_MySQL
-
mysql语句如何插入含单引号或反斜杠的值详解
-
MySQL数据库中每个表占用的空间大小_MySQL