Разница между использованием ССЫЛКИ с и без 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 является ошибкой). Если да, то почему он использует ССЫЛКИ, если он ссылается на себя?
Ответы
Ответ 1
Поздравляем! Вы наткнулись на один из странных причуд MySQL. Первый синтаксис абсолютно ничего не делает. Он молча, да, молча игнорируется.
Кроме того, InnoDB не распознает или не поддерживает "встроенные спецификации ССЫЛКИ" (как определено в стандарте SQL), где ссылки определены как часть спецификации столбца. InnoDB принимает предложения REFERENCES только в том случае, если они указаны как часть отдельной спецификации FOREIGN KEY. Для других систем хранения MySQL Server анализирует и игнорирует спецификации внешнего ключа.
Это немного ниже половины create table
документации.