Проблем:
Искате да създадете външен ключ за таблица в база данни.
Пример:
Бихме искали да създадем таблица с име student който съдържа външен ключ, който препраща към id колона в таблицата city .
Решение 1 (нова таблица):
СЪЗДАВАНЕ НА ТАБЛИЦА ученик (id INT ПРАВИЛЕН КЛЮЧ, първо_име VARCHAR(100) NOT NULL, фамилия VARCHAR(100) NOT NULL,city_id INT ВЪНШНИ КЛЮЧИ РЕФЕРЕНЦИИ city(id));
Дискусия:
За да създадете нова таблица, съдържаща колона с външен ключ, която препраща към друга таблица, използвайте ключовата дума FOREIGN KEY REFERENCES в края на определението на тази колона. Следвайте това с името на посочената таблица и името на реферираната колона в скоби.
В нашия пример създаваме таблицата student с помощта на CREATE TABLE клауза. Изброяваме имената на колоните и поставяме съответните им типове данни в скоби. Колоната city_id е външният ключ в тази таблица и показва стойността на идентификатора, съхранен в колоната id в таблицата city . Пишем FOREIGN KEY REFERENCES в края на дефиницията на тази колона и я последвайте с посочената таблица и колона:city(id) .
Имайте предвид, че можете да създадете повече от един външен ключ за таблица.
Решение 2 (нова таблица):
СЪЗДАВАНЕ НА ТАБЛИЦА ученик (id INT ПРАВИЛЕН КЛЮЧ, първо_име VARCHAR(100) НЕ NULL, фамилия VARCHAR(100) НЕ NULL,city_id INT,ЧУЖЕН КЛЮЧ (city_id) РЕФЕРЕНЦИИ city(id));
Дискусия:
Друг начин да дефинирате външен ключ по време на създаване на таблица е да използвате FOREIGN KEY REFERENCES клауза в края на дефинициите на колоните. В този случай след FOREIGN KEY клауза, ние обозначаваме колоната за външен ключ. Следва REFERENCES клауза заедно с името на посочената таблица и колона.
Можете да създадете външни ключове в повече от една колона, както е показано по-долу:
Решение 3 (нова таблица):
CREATE TABLE студент (id INT PRIMARY KEY,first_name VARCHAR(100) NOT NULL,last_name VARCHAR(100) NOT NULL,score_id INT,subject_id INT, CONSTRAINT fk_student_score_subject_idscore_subject_ids score FOREIGN_ubject score FOREIGN_id_результат FOREIGN_ubject_id_резултат FOREIGN_ubject_id_ );
В този пример ограничението fk_student_score_subject_id е външен ключ, състоящ се от две колони:score_id и subject_id . Тези две колони с външни ключове се отнасят до две колони в таблицата score_subject – score_id и subject_id .
Ето още един пример:
Решение 4 (нова таблица):
СЪЗДАВАНЕ НА ТАБЛИЦА ученик (id INT ПРАВИЛЕН КЛЮЧ, първо_име VARCHAR(100) НЕ NULL, фамилия VARCHAR(100) NOT NULL,city_id INT, ОГРАНИЧЕНИЕ fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id));Дискусия:
В този код отново имаме
CONSTRAINTклауза с името на това ограничение. Използвайте имена, които са лесни за четене и разбиране. В нашия пример използваме иметоfk_student_city_id, което показва съответната таблица и колона. След това пишемFOREIGN KEYи добавете (в скоби) името на колоната, която става външен ключ. Тогава имамеREFERENCESклауза, последвана от името на посочената таблица и колона (тук:id).Решение 5 (съществуваща таблица):
ПРОМЕНЯТ ТАБЛИЦА студент ДОБАВЯНЕ НА ВЪНШЕН КЛЮЧ (city_id) СПРАВКИ city(id);Дискусия:
Възможно е също да добавите нов външен ключ към съществуваща таблица. Тук таблицата се променя с помощта на
ALTER TABLEклауза. Името на таблицата (в нашия примерstudent) се поставя следALTER TABLEключова дума. След товаADD FOREIGN KEYклаузата е последвана от името на колоната, която ще се използва като външен ключ. Тогава имамеREFERENCES clauseс името на посочената таблица и името на колоната с първичен ключ в скоби.Имайте предвид, че таблицата, която променяте, трябва да съществува, преди тази команда да бъде изпълнена.
Решение 6 (съществуваща таблица, ограничение на външния ключ):
ПРОМЕНЯ ТАБЛИЦА ученик ДОБАВЯНЕ НА ОГРАНИЧЕНИЕ fk_student_city_id ВЪНШЕН КЛЮЧ (city_id) РЕФЕРЕНЦИИ city(id)Дискусия:
Използвайте заявка като тази, ако искате да наименувате колона с външен ключ като ограничение за съществуваща таблица. Тук ограничението на външния ключ се нарича
fk_student_city_id. Ако не посочите името на ограничението, базата данни генерира име на ограничение по подразбиране (което ще варира според базата данни).