mysql - Innodb 不允许我更新复合主键?

标签 mysql innodb

我正在尝试创建一个历史表来存储其对应表的所有历史记录

但是,当我从 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 idDROP PK

B 计划:分为两个 ALTER。但我不知道在哪里。我认为问题在于,在替换 PK 之前,ALTER 还没有完全释放 id-PK 链接。因此,至少将 ADD PK 移至第二个 ALTER

关于mysql - Innodb 不允许我更新复合主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55932863/

相关文章:

mysql - 如何正确使用 sum (case ... when ... then ...) ?

php - 从php中的sql查询获取数据并将其发送到另一个php

python - 让 SQL 引擎做约束检查或执行查询以预先检查约束

php - 我的选择菜单每次显示每个记录的每个端口(伦敦、利物浦、都柏林),我只想要每个端口一次

sql - MySQL 查询需要更长的索引?

mysql - 避免插入失败以避免虚假的自动增量

php - 用于测试 Web 表单中用户输入的正确处理的工具

php - 如何防止 Curl 垃圾邮件

MySQL:使用公共(public) ibdata 文件恢复 1 个 InnoDB 表

mysql - 将MyISAM转换为InnoDb错误时间日期格式