2014-10-30 1 views
0

Следующая CREATE TABLE заявление (упрощенную по назначению) хорошо работает на текущем Mysql 5.1/INNODB:Отдельные FOREIGN KEY декларация не может

CREATE TABLE Employee ( 
    id INT NOT NULL PRIMARY KEY 
    ,boss INT REFERENCES Employee 
) 

Теперь я пытаюсь создать FOREIGN KEY отдельно (после выполнения DROP TABLE Employee):

CREATE TABLE Employee ( 
    id INT NOT NULL PRIMARY KEY 
    , boss INT 
    ,CONSTRAINT _FK_boss FOREIGN KEY(boss) REFERENCES Employee 
) 

Это время создания таблицы завершается с сообщением

«Невозможно добавить п ограничение суверенного ключа ".

BTW: Я уже делал DROP/CREATE DATABASE ..., используя имя идентификатора ограничения без каких-либо успехов. Добавление явного "Engine innodb" тоже не помогает. В моей исходной схеме есть две отличные таблицы 1: n, имеющие одинаковое поведение.

Насколько я понимаю http://dev.mysql.com/doc/refman/5.1/en/create-table.html Синтаксис в порядке.

+0

Пожалуйста, *** ПРОЧИТАЙТЕ *** теги, которые вы используете перед их использованием. Это не имеет ничего общего с * Microsoft SQL Server *. –

ответ

0

Внешние ограничения ключа требуют столбец; это необязательно. Это заявление позволит успешной декларации.

CREATE TABLE Employee (
id INT NOT NULL PRIMARY KEY 
, boss INT 
,CONSTRAINT _FK_boss FOREIGN KEY(boss) REFERENCES Employee (id) 
); 
1

Первый пример сделал не работу. Если вы запустите SHOW CREATE TABLE, вы увидите, что ограничения там нет.

MySQL анализирует встроенные объявления внешнего ключа, но InnoDB игнорирует их. InnoDB поддерживает только ограничения на уровне таблиц. И InnoDB требует, чтобы столбец был объявлен явно, хотя стандартный SQL говорит, что он является необязательным.

Это артефакт архитектуры подключаемого модуля хранения MySQL. И не зависящий от хранилища уровень MySQL, и каждый отдельный слой с памятью имеют собственный анализатор SQL, и они могут не согласиться с тем, сколько стандартного языка они поддерживают. Другим примером являются ограничения CHECK, которые анализируются MySQL, но игнорируются всеми механизмами хранения (пока).

Смежные вопросы