Главная SQL Foreign Key
E-mail Печать PDF

FOREIGN KEY - в одной таблице указывает на другой PRIMARY KEY.

Посмотрите на две следующие таблицы:

Есть таблица "Persons":

P_IdLastNameFirstNameAddressCity
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

Есть таблица "Orders":

O_IdOrderNoP_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1

Заметим что колонка "P_Id" в таблице "Orders" указывает на "P_Id" в таблице "Persons".

Колонка  "P_Id" в таблице "Persons" является PRIMARY KEY.

Колонка  "P_Id" в таблице "Orders" является FOREIGN KEY.

FOREIGN KEY не позволяет вставлять неверные данные в колонку "P_Id" в таблице "Orders" и "Persons".

SQL FOREIGN KEY Ограничения при CREATE TABLE

Следующие SQL создает FOREIGN KEY в колонке "P_Id", при создании таблицы "Orders":

MySQL:

CREATE TABLE Orders (
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Orders (
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

Можно распределить ограничитель FOREIGN KEY на несколько столбцов, для этого используйте следующий синтаксис SQL:

MySQL / SQL Server / Oracle / MS Access:

1
2
3
4
5
6
7
8
CREATE TABLE Orders(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)

SQL FOREIGN KEY Ограничения при ALTER TABLE

Следующие SQL создает FOREIGN KEY в колонке "P_Id", когда таблица "Orders" уже создан:

MySQL / SQL Server / Oracle / MS Access:

1
2
3
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

Можно распределить ограничитель FOREIGN KEY на несколько столбцов, для этого используйте следующий синтаксис SQL:

MySQL / SQL Server / Oracle / MS Access:

1
2
3
4
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

Удаление FOREIGN KEY

Для удаления ограничителя FOREIGN KEY используйте следующий SQL:

MySQL:

1
2
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

1
2
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

Комментарии

 
+5 #1 Симо 2011-07-07 15:50 Много полезен урок. Чак сега ми стана ясно за какво са тези външни ключове. Цитировать
 
 
+3 #2 Sin 2011-08-14 17:32 Спасибо за урок, только возникло 2 вопроса:
1. Для чего нам распределять ограничитель FOREIGN KEY на несколько столбцов?
2. Почему мы называет вторичный ключ как fk_PerOrders? это было где-то введено? или мы так же можем назвать как fk_PersonsOrder s?
Цитировать
 
 
+1 #3 pnz 2012-02-21 11:28 Sieht ziemlich ähnlich den beispielenn auf w3s.
w3schools.com/.../...
so etwas gehört sich nicht.
Цитировать
 

Авторизация

Nice Ajax Poll

Какое из моих расширений самое лучшее?

Статистика

Реклама