ERROR 1005: Can't create table. Гуру отзовитесь

Рейтинг: 2Ответов: 3Опубликовано: 18.04.2015

Создал одну таблицу:

CREATE TABLE art (
art_id INT PRIMARY KEY
art_name VARCHAR(20));

А это запрос второй:

CREATE TABLE craft (
cr_id INT AUTO_INCREMENT PRIMARY KEY,
cr_name VARCHAR(20),
cr_art INT DEFAULT 0,
FOREIGN KEY (cr_art) REFERENCES art (art_id) ON DELETE SET DEFAULT);

Но он выдает ошибку:

ERROR 1005 (HY000): Can't create table 'set_default_test.craft' (errno: 150)

Вопрос: Что я сделал не так? Спасибо.

Ответы

▲ 3Принят

А какая подсистема хранения используется? InnoDB?

Тогда это ограничение InnoDB:

While SET DEFAULT is allowed by the MySQL Server, it is rejected as invalid by InnoDB. CREATE TABLE and ALTER TABLE statements using this clause are not allowed for InnoDB tables.

Т.е. остается только ON DELETE SET null

▲ 4

А если on delete set null? Возможно, для default надо задать значение по умолчанию.

▲ 4

Необходимо поменять

FOREIGN KEY (`cr_art`) REFERENCES art (art_id) ON DELETE SET DEFAULT);

на

FOREIGN KEY (`cr_art`) REFERENCES art (art_id) ON DELETE SET null);