gpt4 book ai didi

MySQL MyISAM 如何在不锁定表的情况下执行读取?

转载 作者:可可西里 更新时间:2023-11-01 06:39:31 24 4
gpt4 key购买 nike

我的问题是对 this answer. 的跟进我想了解如何在不使用 MyISAM 引擎锁定表的情况下执行 select 语句。

如果您有 InnoDB 但没有 MyISAM,则答案如下。 MyISAM 引擎的等价物是什么?

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM TABLE_NAME ;
COMMIT ;

最佳答案

这是 MyISAM 表的默认行为。如果真正想要锁定 MyISAM 表,则必须手动获取表级锁。自 MyISAM does not support transactions 以来,事务隔离级别、START TRANSACTIONCOMMITROLLBACK 对 MyISAM 表行为没有影响.

关于内部锁定机制的更多信息

READ 锁在执行 SELECT 语句之前隐式获取,并在执行后释放。请注意,多个并发的、同步的 SELECT 语句可能同时运行,因为多个 session 可能持有同一个表上的 READ 锁。

相反,在执行 INSERTUPDATEDELETE 语句之前隐式获取 WRITE 锁。这意味着只要写入正在进行,就不会发生读取(更不用说并发写入)*

以上仅适用于 MyISAM、MEMORY 和 MERGE 表。

您可能想在这里阅读更多相关信息:


* 但是,由于 this clever trick,并不总是需要这些锁:

The MyISAM storage engine supports concurrent inserts to reduce contention between readers and writers for a given table: If a MyISAM table has no free blocks in the middle of the data file, rows are always inserted at the end of the data file. In this case, you can freely mix concurrent INSERT and SELECT statements for a MyISAM table without locks.

关于MySQL MyISAM 如何在不锁定表的情况下执行读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453650/

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