mariadb alter table 锁策略

mariadb alter table lock strategy

我正在使用 MariaDB 10.1.9。 简短版本:我真正想知道的是,如果我可以在不锁定 table?

长版: 有没有详细说明哪个ALTER TABLE操作需要哪个锁级别?文档只是说 "Depending on the required operation and the used storage engine, different lock strategies can be used for ALTER TABLE."。它不提供 link 任何详细信息,并且 ALTER TABLE 页面上的每个操作都没有指定它所需的级别。

根据实验,我知道 ADD COLUMN 不需要锁。 MODIFY COLUMN允许读,但是可以手动设置为允许写吗? MariaDB documentation 说你可以设置锁定级别,但如果你没有设置足够的限制,它会给出一个错误 - 但它没有说明那个错误是什么。当前的 table 列定义类似于

`Id` int(10) NOT NULL AUTO_INCREMENT
KEY `Id` (`Id`)

当我尝试时

ALTER TABLE MyTable MODIFY MyField bigint AUTO_INCREMENT LOCK=NONE;

我刚收到一个通用的 SQL 语法错误。即使我指定了 DEFAULT,我也会收到一个错误,所以我不确定如何使用 LOCK - 当我选择了不正确的锁定级别时,我希望正确的错误会告诉我。

语法...

alter_specification [, alter_specification] ...

...需要一个逗号

ALTER TABLE MyTable 
  MODIFY COLUMN MyField BIGINT AUTO_INCREMENT, -- comma here
  LOCK=NONE;

我猜错误不只是 "generic" —— 它应该说一些关于 the right syntax to use near 'LOCK... 的事情,这是你的提示 而不是 引用项是错误的开始,而是 parser/lexer 期望 除了 引用值出现在那个位置(因为它正在寻找逗号) .

如果您要更改的列是主键,锁似乎是不可避免的table -- 因为整个 table 应该需要重建,包括所有索引,因为主键 "rides free" 在所有索引中,因为它是在 non-covering 索引查找之后使用的,以实际找到与索引匹配的行。