MySQL中innodb的锁
请问innodb引擎中,当使用update或者insert或者delete语句时,如果没有声明事务的话,数据库会给影响的行加锁么?具体机制是怎么样的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
请问innodb引擎中,当使用update或者insert或者delete语句时,如果没有声明事务的话,数据库会给影响的行加锁么?具体机制是怎么样的?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
innodb中不存在你说的情况。可见官方文档说明:
也就是说,在innodb中,你的语句肯定在事务中。可分为如下几种情况:
显示声明事务: begin or start transaction
只要你执行update、delete,任何DML,都会有行锁。
区别在于你的实例是否自动提交,即看autocommit是怎么设置的
1.autocommit=1,当你执行update时,加行锁,语句执行完了,事务就自动提交,那么行锁也就释放了;
2.autocommit=0,当你执行update时,加行锁,语句执行完了,如果不commit,也不rollback,那么行锁将一直持续到你结束事务为止。
行级锁只对索引有效,没索引直接表锁。
另外“行级锁”不一定只有一行。
事务本身和锁没有任何关系啊...
锁是语句行为,只不过在事务里锁要等事务提交才会释放而不是语句结束就释放