INNODB Каскадный синтаксис / логическая проблема - PullRequest
0 голосов
/ 18 февраля 2009

У меня проблема с базой данных SQL, которую я создаю. Я пытаюсь переключить его на использование INNODB, но мне кажется, что синтаксис (или, возможно, логика) не подходит для каскадирования

Вот часть кода с ошибкой . Не нравится строка 40.

Ошибка вывода в обычной зашифрованной (по крайней мере для меня) форме:

ERROR 1005 (HY000) at line 36: Can't create table './school/staff.frm' (errno: 150)

Edit:

Вот весь файл SQL Я пытаюсь передать, если это поможет.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2009

Вы подразумевали, что ограничение внешнего ключа столбца "роль" будет использовать имя вместо идентификатора? Это выглядит как следующая строка (строка 43):

FOREIGN KEY (role) REFERENCES role(name)

должно быть:

FOREIGN KEY (role) REFERENCES role(id)

Это выполняется без ошибок.

В качестве альтернативы тип данных столбца staff.role (строка 40, роль INT NOT NULL) можно изменить на CHAR (30) NOT NULL.

0 голосов
/ 18 февраля 2009

Внешние ключи должны быть индексами. ( 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;
...