- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的问题是对 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 TRANSACTION
、COMMIT
、ROLLBACK
对 MyISAM 表行为没有影响.
关于内部锁定机制的更多信息
READ 锁在执行 SELECT
语句之前隐式获取,并在执行后释放。请注意,多个并发的、同步的 SELECT
语句可能同时运行,因为多个 session 可能持有同一个表上的 READ 锁。
相反,在执行 INSERT
或 UPDATE
或 DELETE
语句之前隐式获取 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 aMyISAM
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 concurrentINSERT
andSELECT
statements for aMyISAM
table without locks.
关于MySQL MyISAM 如何在不锁定表的情况下执行读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453650/
我是一名优秀的程序员,十分优秀!