@andreyqin

Почему не создается таблица в базе данных MySQL?

Добрый день. Пытаюсь создать таблицы в базе данных, но после добавления в код внешних ключей, создание на одной из таблиц прерывается. Без внешних ключей все работало. Типы полей вроде бы везде одинаковые. Код:

CREATE TABLE menu(
    id int(10) UNSIGNED NOT NULL auto_increment,
    parent_id int(10) UNSIGNED default NULL,
    name varchar(100) NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE dishes(
    id int(10) UNSIGNED NOT NULL auto_increment,
    menu_id int(10) UNSIGNED NOT NULL,
    name varchar(100) NOT NULL,
    title varchar(255) NOT NULL,
    price int(10) UNSIGNED NOT NULL,
    recommendation int(1) UNSIGNED NOT NULL default 0,
    PRIMARY KEY (id),
    FOREIGN KEY (menu_id) REFERENCES menu(id)
      ON UPDATE CASCADE
      ON DELETE CASCADE
);

CREATE TABLE composition(
    id int(10) UNSIGNED NOT NULL auto_increment,
    dishes_id int(10) UNSIGNED NOT NULL,
    product_id int(10) UNSIGNED NOT NULL,
    weight int(10) UNSIGNED NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (dishes_id) REFERENCES dishes(id)
      ON UPDATE CASCADE
      ON DELETE CASCADE,
    FOREIGN KEY (product_id) REFERENCES products(id)
      ON UPDATE CASCADE
      ON DELETE CASCADE
);

CREATE TABLE images(
    id int(10) UNSIGNED NOT NULL auto_increment,
    dishes_id int(10) UNSIGNED NOT NULL,
    title varchar(255) NOT NULL,
    extension varchar(10) NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (dishes_id) REFERENCES dishes(id)
      ON UPDATE CASCADE
      ON DELETE CASCADE
);

CREATE TABLE products(
    id int(10) UNSIGNED NOT NULL auto_increment,
    name varchar(255) NOT NULL,
    calories int(10) UNSIGNED NOT NULL,
    PRIMARY KEY (id)
);


На таблице composition выдает ошибку: Can't create table 'composition' (errno: 150).
Подскажите, в чем проблема?

Дополнительный вопрос: правила удаления/обновления по внешнему ключу для сайта-каталога/интернет-магазина какие лучше задавать?
  • Вопрос задан
  • 4696 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
У Вас на момент создания таблицы `composition` ещё не создана таблица `products`, на которую ссылается FOREIGN KEY (product_id).
Ответ написан
@uzzz
Поместите CREATE TABLE products до CREATE TABLE composition. На момент создания FK constraint таблицы products нет ещё.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы