MYSQL错误#1005

时间:2013-02-15 14:29:58

标签: mysql database

我一直在尝试用乳房创建一个外键,但我总是得到错误1005。 有人帮帮我!?

create table theater (
    name varchar(30) primary key,
    nbrseats int not null
) ENGINE=INNODB;

create table reservation (
    nbr integer auto_increment,
    users_username varchar(30),
    cinemashow_showdate date,
    movies varchar(30),
    nbrseats int not null,
    primary key (nbr),
    foreign key (nbrseats) references theater(nbrseats),
    foreign key (users_username) REFERENCES users(username)
        on delete cascade,
    foreign key (cinemashow_showdate, movies) references cinemashow(showdate, movie_title)
       on delete cascade
) ENGINE=INNODB;

1 个答案:

答案 0 :(得分:1)

要成为另一个表中的FOREIGN KEY,您必须在theater.nbrseats上创建索引。并且为了能够可靠地引用特定行,因此它应该是UNIQUE索引。否则,如果您有重复值,则引用表将无法识别它引用的行。即使InnoDB允许您在非唯一索引上创建关系,也可能不是您正在寻找的行为。

有关该位的更多信息,请参阅this question

create table theater (
  name varchar(30) primary key,
  nbrseats int not null,
  UNIQUE INDEX `idx_nbrseats` (nbrseats)
) ENGINE=INNODB;

对于表FOREIGN KEY中的其他reservation定义也是如此,尽管我们没有在此处看到它们的引用表。规则是:

  • 必须为引用的列编制索引(独立于其上的任何其他复合索引)
  • 引用列必须具有完全相同的数据类型。

然而,这种问题会对您的设计产生疑问。如果您将多个座位附加到预订中,预订座位数完全是否与剧院中可用的座位数相匹配?这也意味着您不能拥有2个座位数相同的影院。

您可能需要在此处重新考虑您的设计,并可能创建引用FOREIGN KEY而不是theater.name的{​​{1}}。