Что это меняет между этими двумя способами объявления внешнего ключа? - PullRequest
1 голос
/ 08 сентября 2011

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

Синтаксис 1:

CREATE TABLE `test2` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idtest` int(10) unsigned NOT NULL,
`desc` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`idtest`) REFERENCES `test` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Синтаксис 2:

CREATE TABLE `test2` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idtest` int(10) unsigned NOT NULL,
`desc` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_1` (`idtest`),
CONSTRAINT `FK_1` FOREIGN KEY (`idtest`) REFERENCES `test` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Спасибо!

Ответы [ 3 ]

1 голос
/ 08 сентября 2011

Необязательное ключевое слово CONSTRAINT позволяет указать имя для внешнего ключа.Без него имя будет генерироваться автоматически.

Это имя можно увидеть в таблице INFORMATION_SCHEMA TABLE_CONSTRAINTS .

1 голос
/ 08 сентября 2011

Функционально разницы нет.

  • Первый пример называет внешний ключ, но именование выполняет СУБД.
  • Второй пример позволяет вам явно назвать внешний ключ самостоятельно.

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

1 голос
/ 08 сентября 2011

Второй синтаксис позволяет вам удалить, изменить или повторно использовать это ограничение в какой-то момент в будущем.

Первый синтаксис нельзя изменить, как в определении таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...