select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。

那么它加的是行锁还是表锁,这就要看是不是用了索引/主键。

没用索引/主键的话就是表锁,否则就是是行锁。

验证:

建表sql

//id为主键
//name 为唯一索引
CREATE TABLE `user` (`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,`name` VARCHAR ( 255 ) DEFAULT NULL,`age` INT ( 11 ) DEFAULT NULL,`code` VARCHAR ( 255 ) DEFAULT NULL,PRIMARY KEY ( `id` ),KEY `idx_age` ( `age` ) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 1570068 DEFAULT CHARSET = utf8

需要关闭自动提交,通过set @@autocommit=0;   设置为手动提交。0代表手动提交,1代表自动提交。

结合一下实例验证

实例1:

使用主键id为条件去查询,然后开启另一个事务去更新数据,更新被阻塞,加锁了,锁定要查询的id为1的行数据。

图一为第一个事务,并且没有提交事务

图二为第二个事务,去更新数据,被阻塞了

图三为第二个事务,长时间拿不到锁报错。

实例2:

我们在开启一个事务对另一条id为2的数据进行更新,

实例3(索引):

一开始的创建表就age创建了唯一索引。

实例4:

使用普通的字段code去操作

另一个事务我去更新另外一条数据,如果我更新成功了,就是锁行,失败了就是锁表。

结果:

如果查询条件用了索引/主键,那么select ..... for update就会进行行锁。

如果是普通字段(没有索引/主键),那么select ..... for update就会进行锁表。

select......for update会锁表还是锁行。相关推荐

  1. 面试官问:select......for update会锁表还是锁行?

    欢迎关注方志朋的博客,回复"666"获面试宝典 select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁 ...

  2. select....for update会锁表还是锁行

    select -for update 除了有查询的作用外,还会加锁呢,而且它是悲观锁.那它会加表锁还是行锁?相信很多人都知道这个结论:要看是不是用了索引/主键.没用索引/主键的话就是表锁,否则就是是行 ...

  3. select……for update会锁表还是锁行

    结果: 如果查询条件用了索引/主键,那么select - for update就会进行行锁. 如果是普通字段(没有索引/主键),那么select - for update就会进行锁表. 例如: 行锁例 ...

  4. select......for update会锁表还是锁行

    select查询语句是不会加锁的,但是 select -for update 除了有查询的作用外,还会加锁呢,而且它是悲观锁. 那么它加的是行锁还是表锁,这就要看是不是用了索引/主键.没用索引/主键的 ...

  5. select......for update会锁表还是锁行?

    select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁. 那么它加的是行锁还是表锁,这就要看是不是用了索引/主键. 没用索 ...

  6. select .... for update究竟锁表还是锁行?

    文章目录 介绍 实例验证 实例前准备数据 实例1--验证通过主键索引查询会锁行 实例2--验证通过普通索引作为查询条件会锁行 实例3--验证查询条件不命中索引会锁表 实例4--验证联合索引匹配到第一个 ...

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

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

  8. Oracle锁表 行级锁 表级锁 行级锁

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

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

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

最新文章

  1. 【MOSS】Sharepoint大附件上传
  2. win7下不能替换系统文件的解决办法
  3. 【数据结构总结】第八章 排序
  4. Unity3d—做一个年月日选择器(Scroll Rect拖动效果优化)— 无限滚动 + 锁定元素...
  5. java爬虫隐藏表单提交_java爬虫--jsoup简单的表单抓取案例
  6. ORACLE定期清理INACTIVE会话
  7. Java 发展简史:初生遇低谷,崛起于互联网
  8. Div图片垂直居中的方法
  9. 【Albert】一文轻松理解Albert
  10. 三十二 、K8s审计
  11. Matlab中的逻辑运算:“any”,“all”
  12. MySQL chartset
  13. 阶段3 3.SpringMVC·_07.SSM整合案例_06.ssm整合之编写MyBatis框架
  14. 深度可分离卷积解析 - MobileNetV1
  15. 中国股市十大风云人物
  16. 暑期实践第二十九天 2022-8-1
  17. 在新加坡旅游过一个令你心跳加速的情人节
  18. 一章——系统安全及应用(应用——linux防护与群集)
  19. Visual Studio中如何设置背景图片,壁纸
  20. Python实现自动化脚本

热门文章

  1. DEMO | AI预测股票短期走势「AI工程论」
  2. 博图只能通过地址相同设备找到plc_【新手】西门子博图基本操作
  3. C++ 标识符的作用域
  4. 《Photoshop修色圣典——PPW专业照片修正流程与技巧》—第1章颜色、对比、颜色...
  5. gfoj树形dp 有线电视网
  6. springalibaba的各种组件应用
  7. 黑洞路由,避免路由环路
  8. vim编辑器的使用介绍
  9. Win10 一机两用
  10. favicon.ico网站图标不显示