【问题标题】:Not able to create table with foreign key constraints for two columns?无法为两列创建具有外键约束的表?
【发布时间】:2015-09-25 16:10:49
【问题描述】:

我在下面创建了机场表:

 CREATE TABLE airports(
   airport_id int(4) unsigned AUTO_INCREMENT NOT NULL,
  airport_name varchar(250),
  primary key(airport_id)
)ENGINE=InnoDB;

但是当我使用外键约束创建计划表时,它无法创建。下面是脚本:

   CREATE TABLE schedule (
      flight_id int(3) unsigned AUTO_INCREMENT NOT NULL,
      origin_airport_id int(4),
      destination_airport_id int(4) ,
      departure_time char(15) not null,
      arrival_time char(15) not null,
      duration varchar(20) not null,
      flight_fare decimal(9,2) not null,
      PRIMARY KEY (flight_id),
      FOREIGN KEY(origin_airport_id,destination_airport_id) REFERENCES airports(airport_id,airport_id) ON DELETE CASCADE ON UPDATE CASCADE
 ) ENGINE=InnoDB;

以下是来自 show 'engine innodb status;' 的错误消息,当我尝试创建调度表时。

Error in foreign key constraint of table airport_db/schedule:
FOREIGN KEY(origin_airport_id,destination_airport_id) REFERENCES airports(airport_id,airport_id) ON DELETE CASCADE ON UPDATE CASCADE
 ) ENGINE=InnoDB:
 Cannot find an index in the referenced table where the referenced columns appear as the first columns, or column types
 in the table and the referenced table do not match for constraint.
 Note that the internal storage type of ENUM and SET changed in tables created with >= InnoDB-4.1.12, and such columns in old tables
 cannot be referenced by such columns in new tables.
 See http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign- key-constraints.html for correct foreign key definition.

【问题讨论】:

  • 外键必须匹配被引用表中的一个键(例如主键)!'
  • @jarlh :它已经在那里了,伙计。
  • 我的意思是 FK 列必须与 PK 列在数量和数据类型上都匹配。 (请参阅 Gordon Linoff 的回答。)您需要两个单独的外键。

标签: mysql sql foreign-keys database-schema


【解决方案1】:

外键需要引用表的主键(或唯一键)。没有重复项。而且,类型必须完全匹配(int 不匹配 int unsigned)。

所以,试试这个吧:

CREATE TABLE schedule (
      flight_id int(3) unsigned AUTO_INCREMENT NOT NULL,
      origin_airport_id int(4) unsigned,
      destination_airport_id int(4) unsigned,
      departure_time char(15) not null,
      arrival_time char(15) not null,
      duration varchar(20) not null,
      flight_fare decimal(9,2) not null,
      PRIMARY KEY (flight_id),
      FOREIGN KEY(origin_airport_id) REFERENCES airports(airport_id) ON DELETE CASCADE ON UPDATE CASCADE,
      FOREIGN KEY(destination_airport_id) REFERENCES airports(airport_id) ON DELETE CASCADE ON UPDATE CASCADE
 ) ENGINE=InnoDB;

Here 是一个 SQL Fiddle。

【讨论】:

  • 没有工作,得到同样的错误。错误代码:1215。无法添加外键约束
  • 非常感谢戈登。我错过了日程表中的“未签名”。非常感谢!!
猜你喜欢
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2014-02-26
  • 2019-07-01
相关资源
最近更新 更多