2019独角兽企业重金招聘Python工程师标准>>>

由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住)。

举个例子: 假设有个表单products ,里面有id跟name二个栏位,id是主键。

例1: (明确指定主键,并且有此笔资料,row lock)

复制代码代码如下:

SELECT * FROM products WHERE id='3' FOR UPDATE;
SELECT * FROM products WHERE id='3' and type=1 FOR UPDATE;

例2: (明确指定主键,若查无此笔资料,无lock)

复制代码代码如下:

SELECT * FROM products WHERE id='-1' FOR UPDATE;

例3: (无主键,table lock)

复制代码代码如下:

SELECT * FROM products WHERE name='Mouse' FOR UPDATE;

例4: (主键不明确,table lock)

复制代码代码如下:

SELECT * FROM products WHERE id<>'3' FOR UPDATE;

例5: (主键不明确,table lock)

复制代码代码如下:

SELECT * FROM products WHERE id LIKE '3' FOR UPDATE;

注1: FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。
注2: 要测试锁定的状况,可以利用MySQL的Command Mode ,开二个视窗来做测试。

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

假设kid 是表table 的 一个索引字段 且值不唯一

1.如果kid 有多个值为12的记录那么:

update table  set name=’feie’ where kid=12;会锁表

2.如果kid有唯一的值为1的记录那么:

update table  set name=’feie’ where kid=1;不会锁

总结:用索引字段做为条件进行修改时, 是否表锁的取决于这个索引字段能否确定记录唯一,当索引值对应记录不唯一,会进行锁表,相反则行锁。

转载于:https://my.oschina.net/u/1032854/blog/355715

MySQL InnoDB 锁表与锁行相关推荐

  1. mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  2. MySQL数据库事务中的行级锁,表级锁,页级锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  3. mysql行级锁unique_MySQL行级锁,表级锁,页级锁详解

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  4. mysql临键锁_详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)

    详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC  ...

  5. MySQL之锁-表级锁

    目录 MySQL之锁-表级锁 1.表级锁分类 2.表锁 2.1分类 2.2表共享读锁 2.2.1特点 2.2.2加读锁 2.3表独占写锁 2.3.1特点 2.3.2加写锁 2.2.3释放锁 3.元数据 ...

  6. Oracle锁表 行级锁 表级锁 行级锁

    2019独角兽企业重金招聘Python工程师标准>>> Oracle锁表  行级锁  表级锁 ---- 行被排他锁定 ----在某行的锁被释放之前,其他用户不能修改此行       ...

  7. oracle update 锁表还是锁行,for update造成的Oracle锁表与解锁

    我遇到的情况: 当使用select语句查询表时,后面跟着for update , select * from table for update 当修改表中数据,但是没有commit就关掉PL/SQL, ...

  8. [DB]ORACLE监控锁表(锁表与解表)

    ORACLE监控锁表(锁表与解表) 1.查询已经锁住的表 SELECT S.USERNAME, DECODE(L.TYPE, 'TM', 'TABLE LOCK', 'TX', 'ROW LOCK', ...

  9. MySQL/InnoDB中,乐观锁、悲观锁、共享锁、排它锁、行锁、表锁、死锁概念的理解

    MySQL/InnoDB的加锁,一直是一个面试中常问的话题.例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?我在工作过程中,也会经常用到,乐观锁,排它锁,等.于是今天就对 ...

  10. mysql索引列是锁表还是锁行_[转]关于MYSQL Innodb 锁行还是锁表

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

最新文章

  1. angular select设置默认选中_改进 Angular + Jest 项目中组件测试的调试
  2. 〖Linux〗Ubuntu13.10中使用虚拟机对MTK手机进行线刷
  3. 配置HADOOP开发环境
  4. C程序中变量存放方式介绍
  5. 关于GIT的SSH加密问题
  6. python表单管理系统_python3开发进阶-Django框架的Form表单系统和基本操作
  7. java 不可修改对象_Java并发编程(六)不可改变对象
  8. 【DP专题】LintCode刷题笔记
  9. 西刺代理python_手把手教你使用Python爬取西刺代理数据(下篇)
  10. 经纬度PLT文件格式说明
  11. 常用9款在线作图工具,总有一款适合你!
  12. 法信智推搜索引擎_法学工具分享
  13. CSS媒体查询(@media)全面解析
  14. 联想y7000 Linux显卡驱动,联想Y7000安装显卡驱动
  15. 考虫四级词汇思维导图
  16. 如何用Excel制作工作计划,跟踪任务进度,快来学习吧
  17. 治愈系课程教材 第三课
  18. MongoDB数据库的安装及使用教程
  19. 2022-06-06 FUSE用户态文件系统
  20. 苹果计算机如何出现关机界面,让你的iPhone开关机重启和电脑一样显示进度条

热门文章

  1. String内容不能改变的理解 String的值不能修改的理解
  2. windows中怎么添加定时任务
  3. Python的类Class中__init__函数和self
  4. 备战秋招——操作系统
  5. zeroclipboard浏览器复制插件使用记录
  6. 我的第一个可用的Windows驱动完成了
  7. 创建型模式(五):Singleton(单例模式)
  8. Vista新特征(Features)(英文)
  9. Objective-C 内存管理机制
  10. HDU_2577 How to Type(DP)