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..

转载于:https://www.cnblogs.com/yulei126/p/6786087.html

mysql 实验论证 innodb表级锁与行级锁相关推荐

  1. Mysql存储引擎Innodb的读写锁、行级锁

    读写锁 Mysql存储引擎Innodb在处理并发读或者写的时候,通过两种类型的锁来解决并发问题,这两种锁通常称为共享锁和排他锁,也叫读锁和写锁. 读锁是共享的,即多个客户端可以同时读取同一资源. 写锁 ...

  2. mysql面试常问 1: 谈谈MySQL表级锁和行级锁

    谈谈MySQL表级锁和行级锁 表级锁与索引无关 行级锁与索引的关系呢??答案是有关系的,但是要具体分析不同情况 主键索引与 行级锁的关系 非主键索引与行级锁的关系 实验如下: CREATE TABLE ...

  3. mysql表级锁和行级锁

    表级锁和行级锁对比: 表级锁: Mysql中锁定 粒度最大 的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁.其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyI ...

  4. mysql行级安全_MySQL学习笔记(五):MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  5. Mysql 的表级锁和行级锁

    表级锁 MySQL表级锁分为读锁和写锁. 读锁 用法:LOCK TABLE table_name [ AS alias_name ] READ 释放锁使用UNLOCK tables.可以为表使用别名, ...

  6. mysql 表级锁_MySQL行级锁和表级锁

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

  7. mysql是表级锁还是行级锁_带你了解MySQL数据库中的全局锁、表级锁、行级锁

    在 MySQL 数据库中,有很多各种各样的锁,这些锁大致可以分为三类:全局锁.表级锁.行级锁.这篇文章小编就带你简单了解一下这三种锁. 1. 全局锁 全局锁是粒度比较大的锁,基本上也使用不上,就像我们 ...

  8. mysql表级锁和行级锁_MySQL表级锁和行级锁

    一:概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

  9. mysql表级锁和行级锁_Mysql的表级锁和行级锁

    表级锁 MySQL表级锁分为读锁和写锁. 读锁 用法:LOCK TABLE table_name [ AS alias_name ] READ 释放锁使用UNLOCK tables.可以为表使用别名, ...

最新文章

  1. optee userpace TA程序中的栈的设置
  2. java构造方法重载_Java 重载、重写、构造函数的实例详解
  3. QT的QOpenGLShaderProgram类的使用
  4. 1965 - 2019 年最流行的编程语言变化
  5. C#实现人脸识别【SqlHelper】
  6. java反射机制的原理与简单使用
  7. Mysql err 1055
  8. Windows Server 2012 Backup安装
  9. 集体智慧编程学习笔记(2.1)提供推荐
  10. 幼儿-综合素质【2】
  11. iOS常用RGB颜色的色值一览表
  12. caffe转onnx总结
  13. UNI-APP,动态设置view的背景图片
  14. 体会现实生活的两个月(上)
  15. “数据源“SqlServer ”包含无法用于处理操作的 ImpersonationMode。不能与名称为“SqlServer ”的数据源进行连接。”
  16. NOIP 2015 蒟蒻做题记录
  17. 【训练日记】20161028
  18. linux中位置变量
  19. 继续啃书,包,触发器
  20. 端口被占用时怎么解决?

热门文章

  1. 笔记 - AliCloud 云上安全防护 简介
  2. 转: centos7 安装 juypter notebook 教程
  3. java78条注意事项
  4. java xml 验证工具_验证xml格式
  5. CCNA重点难点:思科交换机生成树配置
  6. 运维不懂这些面试题拿不到高薪
  7. python ipaddr_python之IP地址或IP段处理模块-ipaddr
  8. c语言printf%%,c语言printf实现同一位置打印输出的实例分享
  9. 版本变迁_一本书遍览古今中外红楼梦版本变迁
  10. php @socket_write,FluffOS 中文站 | socket_write() 函数