• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySql类型转换导致行锁升级为表锁

MySql类型转换导致行锁升级为表锁

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql,锁等相关知识,希望本文的分享对您有所帮助

在MySql的写语句中,给表列赋值与表类型不符合时,MySql底层的优化器发挥作用,会做一个强制类型转化,此时能正常操作,但会导致行锁升级为表锁。示例如下

以student表为例,表字段类型:
1.png表内容如下:
1.png

打开两个session会话窗口,并把两个会话窗口中的MySql的自动提交模式改为手动提交

>set autocommit=false;

1.png在会话窗口1中执行更新语句,但不提交事务。age列在建表时指定的是int类型,此地更新语句中用字符串’100’进行赋值,在MySql的优化器中会自动把字符串’100’强制转化为整形100,然后再执行SQL检索。

>update student set class=3 where age='100'

然后再会话窗口2中对另外没关系的数据执行更新操作

>update student set age=28 where name='lzj';

正常情况下,两条SQL语句操作的行数据不同,执行起来会互不影响,但实际会话1中的更新操作阻塞了会话2中的更新操作
1.png会话1中执行了更新操作,但没有执行事务提交,事务的隔离级别为Read Committed,所以在会话2中还看不到会话1中更新后的结果。但在回话2中执行对其它行数据更新操作时,出现了阻塞。可见会话1中的SQL语句的赋值出现了强转,导致会话1由行锁升级为表锁,锁住了整个student表,因而会话2中的SQL阻塞。下面对会话1中的更新操作执行事务提交,那么会话2中的更新操作就会继续执行了
1.png对会话1中的更新操作执行commit手动提交事务后,会话1释放掉student的表锁,会话2中的更新操作可以继续执行。
最后对会话2中的更新也执行commit事务提交,两条SQL都更新完毕,student表内容如下:
1.png

从上述案例观知,SQL语句赋值与表列类型不匹配时,MySql的优化器强制转化为匹配的类型,导致行锁升级为表锁。所以开发中一定要注意类型的匹配,避免行锁升级为表锁,影响并发性能。

相关推荐:

MySQL行级锁、表级锁、页级锁详细介绍

MySQL锁的用法之表级锁

以上就是MySql类型转换导致行锁升级为表锁的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05SQL查询入门(上篇) 推荐收藏
  • 2018-12-05sqlserver帐号被禁用如何处理
  • 2018-12-05sqlserver利用存储过程去除重复行的sql语句
  • 2018-12-05MYSQL学习总结(八):常见问题
  • 2017-05-11MySQL Memory 存储引擎浅析
  • 2018-12-05使用SQL语句操作数据表的图文详解(phpMyAdmin的使用教程3)
  • 2017-05-11mysql 初始执行文件的使用介绍
  • 2018-12-05SQL Server 2005安装实例环境图解第1/2页
  • 2018-12-05Linux mysql命令安装允许远程连接的安装设置方法
  • 2017-05-11MySQL 最基本的SQL语法/语句

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 一个比较复杂的多次拆分字符串的存储过程
    • mysql 删除操作(delete+TRUNCATE)
    • SQL Select语句完整的执行顺序
    • MongoDB增加用户认证: 增加用户、删除用户、修改用户密码、读写权限、只读权限
    • SQLServer 批量导入目录文件
    • MySQL数据库如何锁定和解锁数据库表?
    • mysql如何自动获取时间日期的实例详解
    • MySQL优化之InnoDB优化代码详解
    • MySQL死锁问题解决的代码详细介绍
    • SQLServer 连接异常与解决方法小结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有