gpt4 book ai didi

mysql - mysql如何锁定一个表而不影响其他表

转载 作者:行者123 更新时间:2023-11-29 03:34:28 25 4
gpt4 key购买 nike

我想锁定 MySQL 中的一个表,目的是在我锁定该表时其他进程无法访问该表。

MySQL 文档是关于LOCK TABLES 命令的:

MySQL 允许客户端 session 显式获取表锁,以便与其他 session 协作访问表,或防止其他 session 在 session 需要独占访问表时修改表。

很好,所以我试试看

mysql>LOCK TABLES foo WRITE;

然后我可以检查其他进程是否无法访问 foo

问题是无法访问其他表。文档说:

需要锁的 session 必须在单个 LOCK TABLES 语句中获取它需要的所有锁。当持有这样获得的锁时, session 只能访问锁定的表

这很奇怪。为什么我还被迫锁定其他表。我只想阻止其他人访问 foo。我不想锁定其他任何东西,我只想正常访问其他表。

如何只锁定一个表而不改变其他表的任何内容??

最佳答案

LOCK TABLES 不依赖于存储引擎,因为它由存储引擎层之上的 SQL 层处理。行锁在 InnoDB 存储引擎中处理。

抱歉,MySQL 的架构太复杂了。这是支持多个存储引擎的优点和缺点。大多数 RDBMS 产品不具备此功能,因此所有存储功能似乎更集成到其余功能中。在MySQL中,存储引擎的代码与存储无关的代码是相互独立的,一些特性可以用特定的存储引擎来实现。

交易就是一个很好的例子。 InnoDB 支持事务,这定义了 InnoDB 锁定的范围。当事务结束时,所有 InnoDB 管理的锁都会被释放。

默认情况下,MySQL 客户端工具和大多数编程接口(interface)都以“自动提交”模式运行。因此,每个 SQL 语句都会启动一个新事务,并在查询完成时自动提交它。

但是您可以控制交易何时开始和结束。参见 http://dev.mysql.com/doc/refman/5.6/en/commit.html

关于mysql - mysql如何锁定一个表而不影响其他表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24834014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com