繁体   English   中英

澄清MySQL数据库中InnoDB引擎中行级锁与MyISAM引擎中表级锁之间的区别

[英]Clarifying the difference between row-level lock in InnoDB engine and table-level lock in MyISAM engine in MySQL database

让我们说,我有两个用户试图按以下顺序访问数据库中名为“ comments”的表:

  1. User1正在制作并更新ID = 10的记录

    更新评论SET评论=“ Hello World”,id = 10

  2. User2对同一表注释的所有行进行选择

    选择*从评论

我想讨论以下情况之间的区别:

  1. 如果表的引擎是MyISAM:更新查询将锁定整个表,该表将对选择查询进行排队,直到该行的更新完成,然后将执行该操作,这将阻止任何用户向该表询问任何内容,直到更新完成完成。
  2. 如果表的引擎是InnoDB:更新查询将锁定更新的行。

我想知道此锁定如何影响选择查询???

我的意思是,如果select向数据库查询注释表的整个记录​​并发现其中之一(id = 10)已锁定,那么数据库是否会再次将select查询排队,直到更新完成?

如果是,那么两个引擎有什么区别?

如果否,我想说的是我在网站上也遇到同样的情况,甚至我将表引擎从MyISAM更改为InnoDB,但是在存在更新或插入查询时仍然排队任何请求的问题仍然存在。

对于这种情况的任何解释将非常有用。 先感谢您

在InnoDB中,这取决于是否启用事务。 InnoDB具有MVCC功能,这意味着在更新线程1时,线程2可以无锁读取。

InnoDB的行锁定与MVCC非阻塞读取相同吗?

如果事务被禁用,是否与MyISAM相同? 我想是这样,但不确定。

在您的方案中的Innodb中,结果将用于选择查询,但如果未更新,则ID为10的行将包含旧数据。结果不会停止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM