我正在尝试创建一个历史表来存储其对应表的所有历史记录
但是,当我从 MyISAM 切换到 InnoDB(由于 DELETE ON CASCADE)时,以下查询会产生错误:表定义不正确;只能有一个自动列,并且必须将其定义为键
CREATE TABLE tdm_history.BATCH LIKE tdm.BATCH;
ALTER TABLE tdm_history.BATCH MODIFY COLUMN id int NOT NULL,
DROP PRIMARY KEY, ADD action VARCHAR(8) DEFAULT 'insert',
ADD revision INT NOT NULL AUTO_INCREMENT,
ADD stamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
ADD PRIMARY KEY (id, revision);
我希望 tdm_history.BATCH
的主键从 id
更改为 (id, revision)
的复合主键。
请注意,当引擎设置为 MyISAM 时,上述查询工作得很好
最佳答案
两个猜测:
A 计划:交换 MODIFY id
和 DROP PK
。
B 计划:分为两个 ALTER。但我不知道在哪里。我认为问题在于,在替换 PK 之前,ALTER
还没有完全释放 id
-PK 链接。因此,至少将 ADD PK
移至第二个 ALTER
。
关于mysql - Innodb 不允许我更新复合主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55932863/