首页 > 解决方案 > 不支持 LOCK=NONE。原因:添加列列...虚拟,添加索引(列)。尝试 LOCK=SHARED

问题描述

所以我需要添加一个基于'created_at'时间戳的日期索引而不锁定表,这是我尝试的:

mysql> ALTER TABLE `datebase1`.`table2` ADD INDEX `date_idx` ((date(`created_at`))), ALGORITHM=INPLACE, LOCK=NONE;

但是有一个sql错误:ERROR 1846 (0A000): LOCK=NONE is not supported. Reason: ADD COLUMN col...VIRTUAL, ADD INDEX(col). Try LOCK=SHARED.

由于它是一个包含 50M 行的巨大表,因此一个简单的 alter index 命令(例如)ALTER TABLE `datebase1`.`table2` ADD INDEX `date_idx` ((date(`created_at`)));将锁定该表并显示waiting for table metadata lock其他正在运行的查询的错误。

我应该怎么做才能完成它(不锁定桌子)?

顺便说一句,我使用的是 Mysql 8.0。

标签: mysql

解决方案


推荐阅读