Вопрос

У меня проблема с базой данных 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top