我有下表:
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:所以我做了一些研究,有些人说我应该删除我的外键约束因为我使用INNODB所以我成功地使用了以下命令:
150)
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')
。
非常感谢任何帮助。
答案 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秒)