删除唯一约束

时间:2016-02-14 09:06:48

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

我有下表:

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
    FlightInstance(FDate);
    
所以我填充了我的表并在FlightInstance表中遇到了这两个条目的问题:     
    INSERT INTO FlightInstance (FLNO, FDate) VALUES (1000 ,"10/5/2015");
    ...
    INSERT INTO FlightInstance (FLNO, FDate) VALUES (1010 ,"10/5/2015");
    

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

    Error on rename of './foo/#sql-699d_5b353' to './foo/FlightInstance' (errno:
150)
所以我做了一些研究,有些人说我应该删除我的外键约束因为我使用INNODB所以我成功地使用了以下命令:     
    alter table FlightInstance drop foreign key  FlightInstance_ibfk_1;
    

但我仍然得到与上面相同的错误。我使用的命令是:     

    alter table FlightInstance drop index FDATE_UNIQUE;
    

命令中我index使用UNIQUE KEY无效,而不是class ReferenceAuthor(_Base): __tablename__ = 'ReferenceAuthor' _reference_id = sa.Column('ReferenceID', sa.Integer, sa.ForeignKey('Reference.ID'), primary_key=True) _person_id = sa.Column('PersonID', sa.Integer, sa.ForeignKey('Person.ID'), primary_key=True) _index = sa.Column('Index', sa.Integer) _person = sao.relationship('Person') class Reference(_Base): __tablename__ = 'Reference' _id = sa.Column('ID', sa.Integer, primary_key=True) _reference_authors = sao.relationship('ReferenceAuthor', order_by=ReferenceAuthor._index) _authors = saa.association_proxy('_reference_authors', '_person')

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

@Kenshin,你在FlightLegInstance而不是FlightInstance上定义了外键。因此,您必须从FlightLegInstance中删除外键。我尝试了它,如下所示:

mysql> alter table FlightLegInstance drop foreign key  flightlegInstance_ibfk_1

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

的MySQL> alter table FlightInstance drop index FDATE_UNIQUE;

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

的MySQL>插入FlightInstance(FLNO,FDate)VALUES(1010,“10/5/2015”); 查询正常,1行受影响(0.06秒)