文章目录

  • 生猛干货
  • 无索引行锁升级为表锁演示
    • 表结构
    • 索引信息
    • 操作演示
    • 结论
  • 搞定MySQL


生猛干货

带你搞定MySQL实战,轻松对应海量业务处理及高并发需求,从容应对大场面试


无索引行锁升级为表锁演示

表结构

mysql> desc country;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| countryname | varchar(255) | YES  |     | NULL    |                |
| countrycode | varchar(255) | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
3 rows in set

索引信息

mysql> show index from country;
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| country |          0 | PRIMARY  |            1 | id          | A         |           5 | NULL     | NULL   |      | BTREE      |         |               |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set

这个表,只有主键索引,其他字段上未建立二级索引 。

现在使用没有建立索引的字段进行操作,观察其结果


操作演示

session1 session2
begin 模拟开启事务
update country set countryname = ‘CCC’ where countrycode = ‘xxx’ ; --更新成功,但未提交事务
begin 模拟开启事务
update country set countryname = ‘DDD’ where countrycode = ‘anotherline’ ; ---- 一直被阻塞 ,直到超时 1205 - Lock wait timeout exceeded; try restarting transaction

我们知道锁主要是加在索引上,如果对非索引字段更新,行锁可能会变表锁 , 从上面的测试中也可以验证这个观点,第二个


结论

InnoDB的行锁是针对索引加的锁,不是针对记录加的锁 ,并且该索引不能失效,否则会从行锁升级为表锁 。

所以建表的时候 ,结合你的业务,如果有更新的操作,切记要对操作的字段建立索引,不然并发下这个问题就非常明显了


搞定MySQL

MySQL - 无索引行锁升级为表锁相关推荐

  1. MySQL 避免行锁升级为表锁——使用高效的索引

    众所周知,MySQL 的 InnoDB 存储引擎支持事务,支持行级锁(innodb的行锁是通过给索引项加锁实现的).得益于这些特性,数据库支持高并发.如果 InnoDB 更新数据使用的不是行锁,而是表 ...

  2. MySQL高级 - 锁 - InnoDB行锁 - 行锁升级为表锁

    无索引行锁升级为表锁 如果不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁,实际效果跟表锁一样. 查看当前表的索引 : show index from test_innodb_lock ...

  3. mysql 表级别的锁和行级别的_MySQL 表锁和行锁机制

    案例分析 目前,MySQL常用的存储引擎是InnoDB,相对于MyISAM而言.InnoDB更适合高并发场景,同时也支持事务处理.我们通过下面这个案例(坑),来了解行锁和表锁. 业务:因为订单重复导入 ...

  4. mysql三锁,mysql锁机制之表锁(三)

    顾名思义,表锁就是一锁锁一整张表,在表被锁定期间,其他事务不能对该表进行操作,必须等当前表的锁被释放后才能进行操作.表锁响应的是非索引字段,即全表扫描,全表扫描时锁定整张表,sql语句可以通过执行计划 ...

  5. mysql BDB支持表锁吗_mysql 表锁问题

    本文转自:http://www.cnblogs.com/itdragon/p/8194622.html MySQL 表锁和行锁机制 行锁变表锁,是福还是坑?如果你不清楚MySQL加锁的原理,你会被它整 ...

  6. Mysql的锁机制之表锁

    Mysql的锁机制之表锁 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除传统的计算资源(如CPU,RAM,I/O等)的争用外,数据也是一种供许多用户共享的资源,如何保证数据并发访 ...

  7. java 锁升级_Java并发 锁优化和锁升级

    前言 本篇文章介绍Java Synchronized锁优化. 锁是存在哪里的,怎么标识是什么锁 Monitor机制在Java中怎么表现的 锁优化 锁升级 1. 锁存在哪里 对象在内存中的布局分为三块区 ...

  8. 小白也能看懂的锁升级过程和锁状态

    一.前言 锁的状态总共有四种,级别由低到高依次为:无锁.偏向锁.轻量级锁.重量级锁,这四种锁状态分别代表什么,为什么会有锁升级?其实在 JDK 1.6之前,synchronized 还是一个重量级锁, ...

  9. synchronized锁升级之轻量级锁

    目录 一.什么是轻量级锁? 二.为什么引入轻量级锁? 三.轻量级锁的升级时机 四.轻量级锁的演示 五.轻量级锁的原理 六.轻量级锁升级为重量级锁的流程 七.轻量级锁的优缺点 一.什么是轻量级锁? 轻量 ...

最新文章

  1. 一款黑科技让普通屏幕秒变触摸屏,厉害了我的哥
  2. 最新17个紫色风格网页设计作品欣赏
  3. java ee jsp_EE JSP:使用自定义标签库生成动态内容
  4. CLR线程池的作用与原理浅析
  5. “期望风险”,“经验风险”与“结构风险”的定义与联系
  6. yagmail设置定时任务
  7. 网络工程师必知的几款网络故障排除工具
  8. 小游戏系列——猜数字游戏
  9. ubuntu系统调节显卡GPU风扇转速
  10. 最短路径-弗洛伊德算法的java实现
  11. MT5和MT4交易软件有什么区别?
  12. Benefits from music
  13. php音频上传失败,flash导入音乐失败怎么办
  14. STM32学习笔记(3) TIM基本定时器
  15. BT功耗问题--连接蓝牙耳机后待机电流大
  16. 如何获取网络视频(或者说后台返回视频URL)第一帧图片以及获取本地视频的第一帧图片
  17. 第五章 主生产计划MPS 第1~3节 计划方案、MPS计划参数
  18. 量化风格:风格短期切换,关注反转与估值(20210106).PDF
  19. 国家地球系统科学数据中心-ftp数据下载
  20. ARP病毒攻击技术分析与防御(补充知识)

热门文章

  1. Oralce的图形化界面----plsql developer涉及到的知识点总结
  2. Flutter快速入门 五步搞定Flutter环境配置
  3. tensorflow 入门经典实例
  4. echarts实时更新数据_虎牙为S10拼了8.0年度更新!随时回放实时数据,还能养柴犬...
  5. [Solved] UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xff in position 0: invalid start byte
  6. MAS 714总复习
  7. CNN(Convolutional Neural Networks)算法
  8. Python入门100题 | 第065题
  9. Python入门100题 | 第016题
  10. Python中numpy库unique函数解析