mysql锁表的原因有哪些


这篇文章主要为大家展示了“mysql锁表的原因有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql锁表的原因有哪些”这篇文章吧。 在mysql中,锁表的原因是一个程序执行了对表的insert、update或者delete操作还未commite时,另一个程序也对同一个表进行相同的操作,则此时会发生资源正忙的异常,也就是锁表。本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。mysql锁表的原因有哪些锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。锁表的原因1、锁表发生在insert update 、delete 中2、锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回滚 或者退出数据库用户  第一、 A程序执行了对 tableA 的 insert ,并还未 commite时,B程序也对tableA 进行insert 则此时会发生资源正忙的异常 就是锁表  第二、锁表常发生于并发而不是并行(并行时,一个线程操作数据库时,另一个线程是不能操作数据库的,cpu 和i/o 分配原则)3、减少锁表的概率:  减开发云主机域名少insert 、update 、delete 语句执行 到 commite 之间的时间。  具体点批量执行改为单个执行、优化sql自身的非执行速度 如果异常对事物进行回滚示例如下:
使用 update  假设kid 是表table 的 一个索引字段 且值不唯一:  1):如果kid 有多个值为12的记录那么:    update table set name=’feie’ where kid=12; #会锁表  2):如果kid有唯一的值为1的记录那么:    update table set name=’feie’ where kid=1; #不会锁总结:用索引字段做为条件进行修改时, 是否表锁的取决于这个索引字段能否确定记录唯一,当索引值对应记录不唯一,会进行锁表,相反则行锁。使用 delete  如果有两个delete : kid1 与 kid2 是索引字段  1):语句1 delete from table where kid1=1 and kid2=2;  2):语句2 delete from table where kid1=1 and kid2=3;     # 这样的两个delete 是不会锁表的  1):语句1 delete from table where kid1=1 and kid2=2;  2):语句2 delete from table where kid1=1 ;     # 这样的两个delete 会锁表以上是“mysql锁表的原因有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注开发云行业资讯频道!

相关推荐: mysql启动的方法

mysql启动的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!MySQL是最受欢迎的开源SQL数据库管理系统,也是一种关系数据库管理系统,关系数据库将数据保存在不同的表中。…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/29 18:11
下一篇 06/29 18:11

相关推荐