旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

MySql范例转换致使行锁升级为表锁【MySQL教程】,mysql,锁

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:66评论:0


导读:在MySql的写语句中,给表列赋值与表范例不符应时,MySql底层的优化器发挥作用,会做一个强迫范例转化,此时能一般操纵,但会致使行锁升级为表锁。示例以下以student表为...

在MySql的写语句中,给表列赋值与表范例不符应时,MySql底层的优化器发挥作用,会做一个强迫范例转化,此时能一般操纵,但会致使行锁升级为表锁。示例以下

以student表为例,表字段范例:
表内容以下:

翻开两个session会话窗口,并把两个会话窗口中的MySql的自动提交形式改成手动提交

>set autocommit=false;

在会话窗口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中实行了更新操纵,但没有实行事件提交,事件的断绝级别为Read Committed,所以在会话2中还看不到会话1中更新后的效果。但在回话2中实行对别的行数据更新操纵时,涌现了壅塞。可见会话1中的SQL语句的赋值涌现了强转,致使会话1由行锁升级为表锁,锁住了全部student表,因此会话2中的SQL壅塞。下面临会话1中的更新操纵实行事件提交,那末会话2中的更新操纵就会继承实行了
对会话1中的更新操纵实行commit手动提交事件后,会话1释放掉student的表锁,会话2中的更新操纵能够继承实行。
末了对会话2中的更新也实行commit事件提交,两条SQL都更新终了,student表内容以下:

从上述案例观知,SQL语句赋值与表列范例不婚配时,MySql的优化器强迫转化为婚配的范例,致使行锁升级为表锁。所以开辟中一定要注重范例的婚配,防止行锁升级为表锁,影响并发机能。

相干引荐:

MySQL行级锁、表级锁、页级锁细致引见

MySQL锁的用法之表级锁

以上就是MySql范例转换致使行锁升级为表锁的细致内容,更多请关注ki4网别的相干文章!

标签:mysql


欢迎 发表评论: