Подтвердить что ты не робот

Разница между использованием ССЫЛКИ с и без FOREIGN KEY?

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

У меня есть два примера:

CREATE TABLE Employee 
(
     id        INT,
     name      VARCHAR(50),
     birthYear INT,
     boss      INT REFERENCES Employees(id),
     worksAt   INT NOT NULL REFERENCES Department(id) ON DELETE CASCADE,
     PRIMARY KEY (id,worksAt)
);

Пример 2:

CREATE TABLE Department 
(
      id                INT PRIMARY KEY,
      name              VARCHAR(50),
      numberOfEmployees INT,
      location          INT NOT NULL,
      country           INT NOT NULL,
      manager           INT,
      FOREIGN KEY (location,country) REFERENCES Location(locId,countryId),
      UNIQUE KEY (manager)
);

Что я спрашиваю здесь, почему второй пример использует ключевое слово FOREIGN KEY, в то время как первый просто использует ССЫЛКИ.

Кроме того, первый, похоже, ссылается на себя (я думаю, что s в Employees является ошибкой). Если да, то почему он использует ССЫЛКИ, если он ссылается на себя?

4b9b3361

Ответ 1

Поздравляем! Вы наткнулись на один из странных причуд MySQL. Первый синтаксис абсолютно ничего не делает. Он молча, да, молча игнорируется.

Кроме того, InnoDB не распознает или не поддерживает "встроенные спецификации ССЫЛКИ" (как определено в стандарте SQL), где ссылки определены как часть спецификации столбца. InnoDB принимает предложения REFERENCES только в том случае, если они указаны как часть отдельной спецификации FOREIGN KEY. Для других систем хранения MySQL Server анализирует и игнорирует спецификации внешнего ключа.

Это немного ниже половины create table документации.