【问题标题】:Cannot trouble dropping unique constraint无法删除唯一约束
【发布时间】:2016-02-14 09:06:48
【问题描述】:

我有下表:

CREATE TABLE FlightInstance (
FLNO INT,
FDate VARCHAR(10),

PRIMARY KEY (FLNO, FDate)
) ENGINE = INNODB;

我添加了以下约束:

ALTER TABLE FlightInstance ADD CONSTRAINT FDATE_UNIQUE UNIQUE (FDate);

我添加了这个约束,以便能够使用FDate 作为引用键并执行此操作(否则我会得到一个错误):

ALTER TABLE FlightLegInstance ADD FOREIGN KEY (FDate) REFERENCES 飞行实例(FDate); 所以我正在填充我的表,并在FlightInstance 表中遇到了这两个条目的问题: 插入飞行实例(FLNO,FDate)值(1000,“10/5/2015”); ... 插入飞行实例(FLNO,FDate)值(1010,“10/5/2015”);

所以我假设我需要删除唯一约束 FDATE_UNIQUE,因为我在 FDate 中有 2 个相同的值,但发出此命令时出现此错误:

将“./foo/#sql-699d_5b353”重命名为“./foo/FlightInstance”时出错(错误:
150) 所以我做了一些研究,有人说我应该删除我的外键约束,因为我使用的是 INNODB,所以我成功地使用了以下命令: 更改表 FlightInstance 删除外键 FlightInstance_ibfk_1;

但我仍然遇到与上述相同的错误。我正在使用的命令是:

更改表 FlightInstance 删除索引 FDATE_UNIQUE;

而不是命令中的index,我还使用UNIQUE KEY 无济于事。

非常感谢任何帮助。

【问题讨论】:

    标签: mysql database foreign-keys constraints unique-constraint


    【解决方案1】:

    可能还有另一个外键引用该索引,这就是删除索引无法成功的原因。

    要找出导致错误的外键,请在尝试删除索引后立即运行SHOW ENGINE INNODB STATUS,然后查看LATEST FOREIGN KEY ERROR 部分。

    【讨论】:

    • 是的,还有另一个外键引用了这个。我知道那是什么桌子。但是我该怎么处理这些信息?我仍然希望它成为FlightLegInstance(在这篇文章中使用)和另一个表的参考键。有没有办法在不施加唯一约束的情况下使用FDate 作为参考?抱歉,我只是不知道如何解决这个问题。
    • 是的,您可以这样做,因为索引不必是唯一的。所以,先删除所有外键,再删除唯一索引,然后在fdate上添加一个非唯一索引,再把外键加回来。
    【解决方案2】:

    @Kenshin,您在 FlightLegInstance 而不是 FlightInstance 上定义了外键。因此,您必须从 FlightLegInstance 中删除外键。我试过了,效果如下:

    mysql> alter table FlightLegInstance drop foreign key  flightlegInstance_ibfk_1
    

    查询正常,0 行受影响(0.11 秒) 记录:0 重复:0 警告:0

    mysql> alter table FlightInstance drop index FDATE_UNIQUE;

    查询正常,0 行受影响(0.23 秒) 记录:0 重复:0 警告:0

    mysql> INSERT INTO FlightInstance (FLNO, FDate) VALUES (1010,"10/5/2015"); 查询正常,1 行受影响(0.06 秒)

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 2020-01-05
      相关资源
      最近更新 更多