Добавление внешнего ключа в существующую таблицу SQL
Primary tabs
На днях столкнулся с проблемой добавления в таблицу поля, которое было бы внешним ключом для другой таблицы. Речь идет именно о таблице, в которой уже есть заполненные поля. Перечитав несколько источников и перепробовав несколько вариантов, определил для себя работающий (не знаю правда оптимальный он или нет), который и перенесу сюда чтобы не забыть, а возможно он пригодится ещё кому-то ) Итак, запрос:
ALTER TABLE articles ADD subcategoryId SMALLINT(4) NOT NULL DEFAULT 4; ALTER TABLE articles ADD FOREIGN KEY (`subcategoryId`) REFERENCES subcategories(`id`);
В первом запросе для таблицы articles мы создаем поле subcategoryId, которое будет выступать внешним ключом. Тут очень важны два момента. Во-первых - тип данных создаваемого столбца должен в точности совпадать с тем, на который он будет ссылаться как внешний ключ (вплоть до количества символов и установленного значения NOT NULL). И во-вторых - нужно установить в качестве дефолтного значения одно из существующих значений того столбца, на который мы будем ссылаться, чтобы в уже существующие записи было введено корректное значение нового внешнего столбца.
Второй запрос это собственно назначение нашего новосозданного столбца внешним ключом.
- Voronve's blog
- Log in to post comments
- 16774 reads
Comments
vedro-compota
Sun, 07/01/2018 - 09:55
Permalink
ещё
ещё интересно использовать ON UPDATE + ON DELETE -- чтобы явно прописать поведение СУБД, на случай если "родитель" этой записи во внешней таблице будет удалён или модифцицирован.
_____________
матфак вгу и остальная классика =)
Voronve
Thu, 07/05/2018 - 02:10
Permalink
Спасибо!
Спасибо, учтем!