假设我有两个用户按照以下顺序尝试访问数据库中名为“comments”的表:
1. User1正在更新id = 10的记录 UPDATE comments SET comment="Hello World" WHERE id=10 2. User2正在选择同一张表comments的所有行 SELECT * FROM comments
我想讨论以下情况的不同之处:
1. 如果表的引擎是MyISAM:更新查询将锁定整个表,从而使选择查询排队等待,直到行的更新完成,然后才会执行以停止任何用户从此表请求任何内容,直到更新完成。 2. 如果表的引擎是InnoDB:更新查询将锁定更新的行。
我想知道这种锁如何影响选择查询?例如,如果选择查询要求数据库返回comments表的全部记录并发现其中一个记录(id = 10)被锁定,那么数据库是否会再次将选择查询排队等待更新完成?
如果是,那么两种引擎之间有什么区别?
如果没有,那么我想说,即使我将表的引擎从MyISAM更改为InnoDB,但在进行更新或插入查询时排队任何请求的问题仍然存在。
对于这种情况的任何解释都将非常有帮助。先谢谢您了。
1. User1正在更新id = 10的记录 UPDATE comments SET comment="Hello World" WHERE id=10 2. User2正在选择同一张表comments的所有行 SELECT * FROM comments
我想讨论以下情况的不同之处:
1. 如果表的引擎是MyISAM:更新查询将锁定整个表,从而使选择查询排队等待,直到行的更新完成,然后才会执行以停止任何用户从此表请求任何内容,直到更新完成。 2. 如果表的引擎是InnoDB:更新查询将锁定更新的行。
我想知道这种锁如何影响选择查询?例如,如果选择查询要求数据库返回comments表的全部记录并发现其中一个记录(id = 10)被锁定,那么数据库是否会再次将选择查询排队等待更新完成?
如果是,那么两种引擎之间有什么区别?
如果没有,那么我想说,即使我将表的引擎从MyISAM更改为InnoDB,但在进行更新或插入查询时排队任何请求的问题仍然存在。
对于这种情况的任何解释都将非常有帮助。先谢谢您了。