Я использую MySQL с движком InnoDB. Я создаю новую таблицу, которая содержит внешний ключ, например:
CREATE TABLE rooms (
id INTEGER NOT NULL AUTO_INCREMENT,
my_id VARCHAR(15),
house_id INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(house_id) REFERENCES houses (id) ON DELETE CASCADE
)
Когда я использую инструмент БД, такой как DBeaver, для просмотра деталей моей базы данных и этой таблицы, я вижу, что мой внешний ключ house_id
отсутствует настройка ON DELETE CASCADE
, а внешний ключ house_id
, похоже, содержит 2 записи в столбце.
DBeaver также показывает DDL для этой таблицы следующим образом:
CREATE TABLE `rooms` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`my_id` varchar(15) COLLATE utf8mb4_general_ci DEFAULT NULL,
`house_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `house_id` (`house_id`),
CONSTRAINT `rooms_ibfk_1` FOREIGN KEY (`house_id`) REFERENCES `houses` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
Почему у DDL есть дополнительная строка KEY 'house_id' ('house_id').
? Эта дополнительная строка также заставляет мой внешний ключ показывать 2 house_id
столбца в моей программе просмотра таблиц DBeaver. Если я избавлюсь от этого, мой ON DELETE CASCADE
будет установлен правильно.
Я использую ORM, поэтому у меня нет контроля над оператором CREATE TABLE
, поэтому я просто пытаюсь хотя бы понять, что здесь происходит.
Спасибо,