Использование CONSTRAINT Alogn с FOREIGN KEY - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь понять разницу между созданием FOREIGN KEY таким образом:

CREATE TABLE child(
    id_child  INT NOT NULL,  
    id_parent INT 
    FOREIGN KEY(id_parent) REFERENCES parent(id_parent));

, а не этот:

CREATE TABLE child(
    id_child  INT NOT NULL,  
    id_parent INT 
    CONSTRAINT FK_id_parent FOREIGN KEY(id_parent) REFERENCES parent(id_parent));

Если я использую первую форму, она все равно создаст CONSTRAINT (индексы Innodb, или я ошибаюсь? Не так проиллюстрировано об индексах). Итак, зачем же явно декларировать CONSTRAINT или нет причин делать это?

1 Ответ

0 голосов
/ 01 мая 2018

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

Это единственное отличие.

(Смущает, что синтаксис для отбрасывания ограничения внешнего ключа не допускает ключевое слово CONSTRAINT, нам нужно ALTER TABLE ... DROP FOREIGN KEY foo, где foo - имя ограничения внешнего ключа, независимо от того, присвоили ли мы имя или InnoDB сгенерировал его.)

Да, InnoDB автоматически создает индекс для поддержки внешнего ключа, если подходящий индекс еще не доступен. Если мы определим индекс отдельно (например, используя KEY indexname (id_parent), то ограничение внешнего ключа может иметь имя, отличное от индекса.

...