SQL FOREIGN KEY制約
別のテーブルの主キーに1つの表の点でFOREIGN KEY。
例で外部キーを示してみましょう。 次の2つの表を見てください:
"Persons"の表:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
"Orders"テーブル:
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
なお、 "P_Id"の列"Orders"に、テーブル・ポイント"P_Id"の列"Persons"のテーブル。
"P_Id"の列"Persons"の表は、内のPRIMARY KEYである"Persons"のテーブル。
"P_Id"の列"Orders"テーブルには、内の外部キーである"Orders"テーブル。
FOREIGN KEY制約は、テーブル間のリンクを破壊する行為を防止するために使用されます。
それはそれが指すテーブルに含まれる値のいずれかである必要があるため、FOREIGN KEY制約はまた、外部キー列に挿入されることから無効なデータを防ぐことができます。
CREATE TABLE上のSQL外部キー制約
次の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制約のネーミングを可能にするために、複数の列にFOREIGN KEY制約を定義するため、次のSQL構文を使用します。
MySQL / SQL Server / Oracle / MS Access:
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)
)
ALTER TABLE上のSQL外部キー制約
上のFOREIGN KEY制約を作成するには"P_Id"列"Orders"テーブルが既に作成され、次のSQLを使用します。
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
FOREIGN KEY制約のネーミングを可能にするために、複数の列にFOREIGN KEY制約を定義するため、次のSQL構文を使用します。
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
FOREIGN KEY制約を削除するには
FOREIGN KEY制約を削除するには、次のSQLを使用します。
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders