当前位置:   article > 正文

Mysql—行锁_mysql commit 忘写 行锁

mysql commit 忘写 行锁
  • 行锁(InnoDB)

—mysql默认自动commit,oracle默认不会自动commit
在这里插入图片描述
为了研究行锁,暂时将自动commit关闭;
set autucommit = 0;

行锁,操作相同数据:
会话0:写操作
insert into linelock values(6,‘a6’);

会话1:写操作,同样的数据(发现锁住了,必须等到会话0 commit或rollback后,才能继续执行)
update linelock set name = ’ax’ where id = 6;

结论1:
1.如果会话X对某条数据a进行DML(增删改)操作(研究时:关闭了自动commit的情况下),则其他会话必须等待会话x结束事务(commit/rollback)后,才能对数据a进行操作。
2.表锁是通过unlock tables解锁,也可以通过事务解锁;行锁是通过事务解锁(commit/rollback)。

行锁,操作不同数据:
会话0:写操作
insert into linelock values(8,‘a8’);

会话1:写操作,不同的数据
update linelock set name = ’ax’ where id = 5;

结论2:
行锁,一次锁一行数据;因此如果操作的是不同数据,则不干扰。

行锁的注意事项:
a.如果没有索引,则行锁会转为表锁
b.行锁的一种特殊情况:间隙锁:值在范围内,但却不存在

行锁:
InnoDB默认采用行锁;
缺点:比表锁性能损耗大
优点:并发能力强,效率高
因此建议,高并发用InnoDB,否则用MyISAM

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/998385
推荐阅读
相关标签
  

闽ICP备14008679号