在调用存储过程中,就会涉及到表锁,行锁这一概念:所谓区别:有索引的时候就是行锁,没有索引的时候就是表索。
innodb 的行锁是在有索引的情况下,没有索引的表是锁定全表的.
表锁演示(无索引)
Session1:
mysql> set autocommit=0;
mysql> select * from innodb_test;
+------+-------------+
| id | name |
+------+-------------+
| 1 | woshiceshi |
| 2 | woshiceshi2 |
| 3 | woshiceshi3 |
+------+-------------+
mysql> select * from innodb_test where id = 2 for update;
+------+------------+
| id | name |
+------+------------+
| 2 | woshiceshi2 |
+------+------------+
Session2:
mysql> update innodb_test set name='sjis' where id = 1 ;
处于等待状态....
再回到session1 commit以后,session2就出来结果了(锁定了8秒,过了8秒左右才去session1提交)。
mysql> update innodb_test set name='sjis' where id = 1 ;
Query OK, 1 row affected (8.11 sec)
Rows matched: 1 Changed: 1 Warnings: 0
实验结果是:我在session1的for update 操作看似只锁定ID为2的行其实锁定了全表,以至于后面session2的对ID为1的行update 需要等待Session1锁的释放。
行锁演示(索引为ID)
Session1:
mysql> alter table innodb_test add index idx_id(id);
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from innodb_test where id = 2 for update;
+------+------------+
| id | name |
+------+------------+
| 2 | woshiceshi2 |
+------+------------+
Session2:
mysql> update innodb_test set name='wohaishiceshi' where id = 1 ;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from innodb_test where id = 1;
+------+---------------+
| id | name |
+------+---------------+
| 1 | wohaishiceshi |
+------+---------------+
1 row in set (0.00 sec)
实验结果:这次的锁定是锁定的行,所以没有被锁定的行(ID不为2的行)可以进行update..
分享到:
相关推荐
主要介绍了MySQL 行锁和表锁的含义及区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
我们知道mysql的Innodb引擎是支持行锁的,与Oracle不同,mysql的行锁是通过索引加载的,即行锁是加载索引响应的行上的,要是对应的SQL语句没有索引,则会走表锁。 行锁无法实现,取而代之就是表锁。 行锁特点: 1....
MySQL锁机制_管理(并发锁,行锁,表锁,预加锁,全局锁等等).mht
mysql锁,与事务,以及各种级别锁,和乐观锁悲观锁的研究使用
参考 https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html MySQL各种锁0. 预备知识1. 行级锁1.1. 共享锁`Shared Locks` (`S`)1.2.... 行锁和表锁的冲突和兼容4 行锁的实现方式4.1 记录锁
1、连接数查询 2、行锁和表锁查询 3、慢sql查询
本文全面讲解了MySQL中锁包括表锁,行锁,共享锁,排它锁,间隙锁的详细使用方法
主要给大家介绍了关于MySQL全局锁和表锁的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
59.MySQL高级_索引失效行锁变表锁.avi 58.MySQL高级_行锁演示答疑补充.avi 57.MySQL高级_行锁案例讲解.avi 56.MySQL高级_行锁理论.avi 55.MySQL高级_读锁案例讲解2.avi 54.MySQL高级_读锁案例讲解.avi ...
20.MySQL高级锁InnoDB行锁行锁升级为表锁.avi 21.MySQL高级锁InnoDB行锁间隙锁危害.avi 22.MySQL高级锁InnoDB行锁争用情况查看.avi 23.MySQL高级锁InnoDB行锁总结.avi 24.MySQL高级SQL技巧SQL执行顺序及正则表达式....
· 00.尚硅谷_MySQL高级_源码...尚硅谷_MySQL高级_索引失效行锁变表锁 · 60.尚硅谷_MySQL高级_间隙锁危害 · 61.尚硅谷_MySQL高级_如何锁定一行 · 62.尚硅谷_MySQL高级_行锁总结 · 63.尚硅谷_MySQL高级_主从复制
下面这个语句是锁定一行数据,开始读取,一直到删除后都不会有第二个人也读到这条数据
1.行锁和表锁 2.悲观锁和乐观锁 10.MySql优化(高薪常问) 1) 定位执行效率慢的sql语句.(了解) 2) 优化索引(高薪) 3) Sql语句调优(高薪) 4) 合理的数据库设计(了解) 四. 框架 1. Mybatis框架 2. Spring框架 3....
MySQL作为一种数据库软件,难免会存在对其共享资源的并发访问,为了协调和管理不同资源的并发访问,也就产生了锁机制,因为锁机制的存在为数据库提供了数据的完整性和一致性。 从锁的级别来分锁可分为:行级锁、表级...
主要包括锁机制、表锁、行锁、间隙锁、页锁,具体的应用案例分析、案例总结、行锁分析、表锁分析以及优化建议
常用的存储引擎有 InnoDB 和 MyISAM,前者支持行锁和表锁,后者只支持表锁。 如果数据库操作是基于表锁实现的,试想下,如果一张订单表在更新时,需要锁住整张表,那么其它大量数据库操作(包括查询)都将处于等待...