我们假设我有两个用户尝试按以下顺序访问数据库中名为“comments”的表:
User1正在为id = 10
的记录制作和更新更新注释SET comment =“Hello World”WHERE id = 10
User2正在为同一个表注释的所有行进行选择
SELECT * FROM comments
我想讨论以下案例之间的区别:
我想知道这个锁定如何影响SELECT QUERY ???
我的意思是如果select询问数据库注释表的整个记录,发现其中一个(id = 10)被锁定,数据库是否会再次对select查询进行排队,直到更新完成?
如果是,则两个引擎之间有什么区别??
如果不是我想说我的网站上面有相同的情况,甚至我将我的表引擎从MyISAM更改为InnoDB,但是在发生更新或插入查询时仍然会出现排队任何请求的问题。
对这种情况的任何解释都会非常有用。提前谢谢你
答案 0 :(得分:1)
在InnoDB中,它取决于是否启用了事务。 InnoDB具有MVCC功能,这意味着当线程1正在更新时,线程2可以无锁地读取。
这已经在InnoDB's row locking the same as MVCC Non-Blocking Reads?
回答了如果禁用交易,与MyISAM相同?我想是的但不确定。
答案 1 :(得分:0)
在你的场景中的Innodb中,结果将来自select查询,但是如果没有更新,则id为10的行的旧数据。结果不会停止。