ошибка в создании таблицы -mysql - PullRequest
1 голос
/ 12 октября 2010

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

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

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

1 Ответ

1 голос
/ 12 октября 2010

Существуют условия, которые должны быть выполнены для внешнего ключа:

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

  • Типы данных должны быть одинаковыми в обеих таблицах. Например. VARCHAR (250) не идентичен VARCHAR (255).

  • Для столбцов в родительской таблице должно быть ограничение PRIMARY KEY или UNIQUE.

  • Ваш внешний ключ должен объявлять те же столбцы в том же порядке, что и в ограничениях PRIMARY KEY или UNIQUE в родительской таблице. Это ваша наиболее вероятная проблема.

Так, например, если это ваша родительская таблица:

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
);
...