Вопрос

Ошибка: не может создать таблицу c.handsets

Как мне найти проблему?

Я сделал базу данных и обнаружил, что в ней созданы другие таблицы, но только один дает мне эту ошибку.

Это было полезно?

Решение

Есть условия, которые должны быть удовлетворены иностранным ключом:

  • Вы должны использовать двигатель NODB хранения в обеих таблицах.

  • Типы данных должны быть идентичный в обеих таблицах. Например, 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