错误是:无法创建表C.Handsets

我如何找到问题?

我已经制作了一个数据库,发现我的其他表是在其中创建的,但只有一个给我这个错误。

有帮助吗?

解决方案

对于外国钥匙,必须满足某些条件:

  • 您必须在两个表中使用InnoDB存储引擎。

  • 数据类型必须是 完全相同的 在两个表中。例如Varchar(250)与Varchar(255)不同。

  • 父表中的列上必须有一个主键或唯一约束。

  • 您的外键必须按照父表中的主键或唯一约束的顺序声明相同的列。这是您最有可能的问题。

因此,例如,如果这是您的父表:

CREATE TABLE PhoneModels (
  make VARCHAR(255),
  model VARCHAR(255),
  PRIMARY KEY (make, model)
);

以下是错误的,因为主键具有两个列,但是每个外键都有一个列。

CREATE TABLE Handsets
(
  ...
  make VARCHAR(255),
  model VARCHAR(255),
  FOREIGN KEY (make) REFERENCES PhoneModels(make),                  // WRONG
  FOREIGN KEY (model) REFERENCES PhoneModels(model)                 // WRONG
);

它不起作用;您应该有一个参考这两个列的外键。

CREATE TABLE Handsets
(
  ...
  make VARCHAR(255),
  model VARCHAR(255),
  FOREIGN KEY (make, model) REFERENCES PhoneModels(make, model),    // RIGHT
);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top