最新のWeb開発のチュートリアル
 

SQL外部キー制約


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