Dre*_*rew 176 mysql constraints foreign-keys mysql-error-1025
我有一个表,其主键在其他几个表中使用,并有几个外键到其他表.
CREATE TABLE location (
locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
...
) ENGINE = InnoDB;
CREATE TABLE assignment (
assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
locationID INT NOT NULL,
FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID)
...
) ENGINE = InnoDB;
CREATE TABLE assignmentStuff (
...
assignmentID INT NOT NULL,
FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID)
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
问题是,当我试图删除其中一个外键列(即locationIDX)时,它会给我一个错误.
"ERROR 1025(HY000):重命名时出错"
如何在不发生此错误的情况下删除上面的分配表中的列?
pug*_*arx 423
正如解释在这里,似乎外键约束必须由被丢弃的约束名称,而不是索引名.语法是:
alter table footable drop foreign key fooconstraint
Run Code Online (Sandbox Code Playgroud)
zom*_*bat 21
外键用于确保数据完整性,因此只要它是外键的一部分,就不能删除列.你需要先放下钥匙.
我认为以下查询会这样做:
ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
Run Code Online (Sandbox Code Playgroud)
小智 15
如上所述,您可以轻松删除FK.但是,我只是注意到有必要在某些时候删除KEY本身.如果您有任何错误消息要创建另一个索引(如最后一个),我的意思是使用相同的名称,删除与该索引相关的所有内容会很有用.
ALTER TABLE your_table_with_fk
drop FOREIGN KEY name_of_your_fk_from_show_create_table_command_result,
drop KEY the_same_name_as_above
Run Code Online (Sandbox Code Playgroud)
小智 8
检查CONSTRAINT名称和FOREIGN KEY名称:
SHOW CREATE TABLE table_name;
Run Code Online (Sandbox Code Playgroud)
删除CONSTRAINT名称和FOREIGN KEY名称:
ALTER TABLE table_name
DROP FOREIGN KEY the_name_after_CONSTRAINT,
DROP KEY the_name_after_FOREIGN_KEY;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
小智 5
嘿,我按照上面的一些顺序,找到了一些解决方案。
SHOW CREATE TABLE footable;
Run Code Online (Sandbox Code Playgroud)
您将获得 FK 约束名称,例如
ProjectsInfo_ibfk_1
Run Code Online (Sandbox Code Playgroud)
现在您需要删除此约束。通过更改表命令
alter table ProjectsInfo drop foreign key ProjectsInfo_ibfk_1;
Run Code Online (Sandbox Code Playgroud)
然后删除表列,
alter table ProjectsInfo drop column clientId;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
319597 次 |
| 最近记录: |