Проблема каскадного синтаксиса / логики INNODB
-
05-09-2019 - |
Вопрос
У меня проблема с базой данных SQL, которую я создаю.Я пытаюсь переключить его на использование INNODB, но, похоже, я не могу получить правильный синтаксис (или, возможно, логику) для каскадирования.
Вот такой часть кода с ошибкой.Ему не нравится строка 40.
Вывод ошибки в обычной загадочной (по крайней мере, для меня) форме:
ERROR 1005 (HY000) at line 36: Can't create table './school/staff.frm' (errno: 150)
Редактировать:
Вот этот весь SQL-файл целиком Я пытаюсь подключиться, если это поможет.
Решение
Внешние ключи должны быть индексами.(role.name)
Попробуй это:
CREATE TABLE IF NOT EXISTS `role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(30) NOT NULL,
`description` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB;
Другие советы
Вы имели в виду, что ограничение внешнего ключа столбца "роль" должно использовать имя вместо идентификатора?Это выглядит как следующая строка (строка 43):
FOREIGN KEY (role) REFERENCES role(name)
должно быть:
FOREIGN KEY (role) REFERENCES role(id)
Это выполняется без ошибок.
В качестве альтернативы, тип данных столбца "staff.role" (строка 40, role INT NOT NULL) может быть изменен на CHAR(30) NOT NULL.