在不更改外键的情况下更改主键(MySQL)

时间:2017-11-21 18:57:14

标签: mysql sql database-schema liquibase

我有一个实体表,每个实体都有idnamename是我们原来的主键,但为了支持快速重命名,我们尝试从使用name转换为使用id作为主键和所有外键。

我尝试做的是切换而无需(最初)删除外键。从某种意义上说,我需要使用name上的唯一约束替换name上的主键,以便在id上添加主键。我以为这个说法会奏效:

ALTER TABLE table_1 DROP PRIMARY KEY, ADD CONSTRAINT UNIQUE (name), ADD PRIMARY KEY (id)

此响应失败:Error Code: 1215. Cannot add foreign key constraint。 InnoDB错误日志中的更多细节:

Error in foreign key constraint of table schema_name/table_2:
there is no index in referenced table which would contain
the columns as the first columns, or the data types in the
referenced table do not match the ones in table. Constraint:

CONSTRAINT "fk_table_1_t1name_external" FOREIGN KEY ("external", "t1_name") REFERENCES "table_1" ("external", "name") ON DELETE NO ACTION ON UPDATE CASCADE
The index in the foreign key in table is "fk_table_1_t1name_external"

最奇怪的是,改变仍然有效:

name    varchar(80) NO  UNI     
id      varchar(40) NO  PRI

有没有办法摆脱这个错误,或者更好的方法来执行此更改?我们使用liquibase进行数据库更改管理,因此即使更改集仍按预期进行处理,导致错误的更改集也会阻止任何后续更改。

0 个答案:

没有答案