首页 文章

mariadb改变表锁策略

提问于
浏览
1

我正在使用MariaDB 10.1.9 . Short version :我真的想知道的是,如果我可以修改innodb表上从int到bigint的索引auto_increment字段而不锁定表吗?

Long version :是否有详细说明哪个ALTER TABLE操作需要哪个锁定级别?文档只是说"Depending on the required operation and the used storage engine, different lock strategies can be used for ALTER TABLE." . 它没有达到所需的水平 .

从实验来看,我知道ADD COLUMN不需要锁定 . MODIFY COLUMN允许读取,但可以手动设置以允许写入吗? MariaDB documentation表示您可以设置锁定级别,但如果您没有说明该错误是什么 . 当前表列定义如下所示

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

当我尝试

ALTER TABLE MyTable MODIFY MyField bigint AUTO_INCREMENT LOCK=NONE;

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

1 回答

  • 2

    语法......

    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... 的内容,这是你的暗示并不是引用的术语是错误的开始,而是说解析器/词法分析器期望的东西不是引用的在该位置发生的值(因为它正在寻找逗号) .

    如果要更改的列是主键,则锁似乎是不可避免的 - 因为整个表应该需要重建,包括所有索引,因为主键在所有索引中“自由”,因为它是在非后使用的 - 覆盖索引查找以实际查找索引匹配的行 .

相关问题