как добавить внешний ключ? - PullRequest
2 голосов
/ 13 марта 2011

Я создаю таблицу с именем "temp1" - у нее есть первичный ключ с именем aa и некоторые другие поля. И у меня есть еще одна таблица с именем temp2.

Я хочу добавить foreign key к нему с именем cc.

Я написал код ниже, но в нем есть некоторые ошибки:

create table temp1 (    
  aa int,    
  primary key(aa)    
);

create table temp2 (
  bb int,
  cc int,
  primary key(bb),
  foreign key(cc) references temp1
);

.. Но у него есть эта ошибка:

не может создать таблицу 'temp.temp2'

temp - это имя моей базы данных.

Edit:

Я вставляю данные в aa (первичный ключ в temp1), но он не импортируется в

куб. См (внешний ключ в temp2).

почему

Я думал, что если вставить данные в первичный ключ, это автоматически вставить в

внешний ключ !! если это правда?

Ответы [ 3 ]

5 голосов
/ 13 марта 2011

Вам также необходимо указать внешнее поле, на которое вы ссылаетесь:

foreign key (cc) references temp1 (aa)

в операторе создания таблицы или

alter table temp2 add foreign key (cc) references temp1 (aa)

после этого. Кроме того, ваш SQL для таблицы temp1 неисправен - нет поля a для создания первичного ключа - я предполагаю, что это просто опечатка в вашем вопросе.

1 голос
/ 13 марта 2011

Из документации внешнего ключа MySQL :

Если MySQL сообщает об ошибке 1005 из оператора CREATE TABLE и сообщение об ошибке ссылается на ошибку 150, создание таблицы завершилось неудачно, поскольку ограничение внешнего ключа было сформировано неправильно.

Проверка вашего запроса, это правильно - вам нужно использовать:

CREATE TABLE temp2 (
  bb int,
  cc int,
  PRIMARY KEY (bb),
  FOREIGN KEY (cc) REFERENCES temp1(aa)
);

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

0 голосов
/ 14 марта 2011

Ваш код является допустимым стандартным синтаксисом SQL-92.

Вы можете проверить это, используя онлайн Mimer SQL-92 Validator .

В этом можно убедиться, прочитав спецификацию SQL-92, 11.8 «Определение ссылочного ограничения», 2b):

Если ссылка на таблицу и столбцы не указывает ссылочный столбец список, то дескриптор таблицы указанная таблица должна включать уникальное ограничение, которое определяет PRIMARY KEY.

К сожалению, mySQL не совместим с SQL-92, и кажется, что список справочных столбцов необходим.

...