SQL FOREIGN KEY 制約
あるテーブルの FOREIGN KEY は、別のテーブルの PRIMARY KEY を指します。
例を通して外部キーについて説明しましょう。次の 2 つのテーブルを参照してください:
"persons" テーブル
P_Id | LastName | FirstName | Address | City |
---|
1 | Hansen | オラ | Timoteivn 10 | サンドネス |
2 | スヴェンソン | トーベ | ボルグブン23 | サンドネス |
3 | ペッターセン | カリ | ストルグト20 | スタヴァンゲル |
「注文」テーブル:
O_Id | OrderNo | P_Id |
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
「Orders」テーブルの「P_Id」列が「Personals」テーブルの「P_Id」列を指していることに注意してください。
「パーソン」テーブルの「P_Id」列は、「パーソン」テーブルの主キーです。
「Orders」テーブルの「P_Id」列は、「Orders」テーブルの FOREIGN KEY です。
FOREIGN KEY 制約は、テーブル間の結合を破壊する動作を防ぐために使用されます。
FOREIGN KEY 制約は、外部キー列に不正なデータが挿入されることも防ぎます。これは、外部キー列が指すテーブル内の値の 1 つである必要があるためです。
CREATE TABLE 時の SQL FOREIGN KEY 制約
次の SQL は、「Orders」テーブルの作成時に「P_Id」列に FOREIGN KEY 制約を作成します。
MySQL:
CREATE TABLE Orders
(
o_id int not not null、oorderno int not null、
p_idint、
primarykey(o_id)、
foreignキー(p_id)参照者(p_id)
)
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 制約
"Orders" テーブルが作成されたとき (必要な場合) 「P_Id」列作成の FOREIGN KEY 制約を指定するには、次の SQL を使用してください:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE OrdersADD FOREIGN KEY (P_Id)
REFERENCES persons(P_Id) 必要な場合 FOREIGN KEY制約に名前を付け、複数の列にFOREIGN KEY制約を定義するには、次のSQL構文を使用します:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE OrdersADD CONSTRAINT fk_PerOrders
FOREIGN KEY ( P_Id)REFERENCES persons(P_Id)
FOREIGN KEY制約を取り消す
FOREIGN KEY制約を取り消すには、次のSQLを使用してください:
MySQL:
ALTER T ABLE 注文海外からのドロップKEY fk_PerOrders
SQL Server/Oracle/MS アクセス:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders