gpt4 book ai didi

MySQL/MariaDB 锁定之前的锁定

转载 作者:行者123 更新时间:2023-11-29 06:24:03 26 4
gpt4 key购买 nike

我对表进行了以下完全锁定:

LOCK TABLES t1 WRITE, t2 WRITE;

我想稍后(在同一个 session 中)再向锁中添加一个表。所以我执行

LOCK TABLES t1 WRITE, t2 WRITE, t3 WRITE;

这似乎工作得很好。我的问题是:这安全吗?我的意思是,数据库内部发生了什么?它是否首先解锁 t1、t2 表,然后立即锁定 t1、t2、t3,从而可能在三个表实际锁定之前对任何表进行不必要的访问?

我正在使用 MariaDB 并且正在阅读 documentation , 但在那里没有找到答案。

最佳答案

LOCK TABLES 用于 MyISAM 表。如果您使用的是 InnoDB,请切换到 BEGIN...COMMIT 并了解“事务”并且不要使用 LOCK

使用LOCK TABLES 时,您有一次 机会锁定所有 您需要的表。在您的示例中,将在获取 3 个表上的锁之前释放 2 个表上的锁。在那段时间里,其他一些连接可能会占用 t1 和/或 t2。这可能会打乱您的设计。

由于 MariaDB 基于 MySQL,this documentation提供了明确的答案:

If a session issues a LOCK TABLES statement to acquire a lock while already holding locks, its existing locks are released implicitly before the new locks are granted.

(如果你用的是Aria引擎,我不知道答案是什么。)

关于MySQL/MariaDB 锁定之前的锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32035647/

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