SQL 外来キー


SQL CREATE TABLE
SQL CREATE VIEW
SQL CREATE INDEX
SQL ALTER TABLE
SQL 主キー
SQL 外来キー
SQL DROP TABLE
SQL TRUNCATE TABLE
SQL INSERT INTO
SQL UPDATE
SQL DELETE FROM


サイトのご案内

  SQL > テーブル処理 > 外来キー

外来キーが一つ(又は複数)の他のテーブルの主キーフィールドを指し、データの参照整合性(referential integrity)を確かめるために使われます。言い換えれば、許されたデータ値だけがデータベースの中に保存されることになります。

例えば、仮に二つのテーブルがあるとします。一つはCUSTOMER テーブルで、すべての顧客データが記録されるもの。もう一つはORDERS テーブルで、顧客からの注文がすべて記録されるもの。そこで、一つの制約があり、すべての注文データの顧客が CUSTOMER テーブルに存在すること。ここで、ORDERS テーブルに外来キーを設定し、その外来キーが CUSTOMER テーブルの主キーを指します。そうすると、 ORDERS テーブルにある顧客がすべてCUSTOMER テーブルに存在することを確実にすることができます。 言い換えれば、ORDERSテーブルは、すべて CUSTOMER テーブルに存在する顧客のデータです。

その二つのテーブルの構造は次のようになります。

CUSTOMER テーブル
フィールド名 性質
SID 主キー
Last_Name  
First_Name  

ORDERS テーブル
フィールド名 性質
Order_ID 主キー
Order_Date  
Customer_SID 外来キー
Amount  

上述の例の中に、ORDERS テーブルにある customer_SID フィールドは、CUSTOMERS テーブルのSID フィールドを指す外来キー。

次は、ORDERS テーブルを作るときに使われる外来キーの指定方法を幾つか挙げます。

MySQL:
CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
Primary Key (Order_ID),
Foreign Key (Customer_SID) references CUSTOMER(SID));

Oracle:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references CUSTOMER(SID),
Amount double);

SQL Server:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date datetime,
Customer_SID integer references CUSTOMER(SID),
Amount double);

続いて、テーブル構造の変更により、外来キーを指定する例。ここで、仮に、 ORDERS テーブルが既に作られ、外来キーがまだ指定されていないことにします。

MySQL:
ALTER TABLE ORDERS
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID);

Oracle:
ALTER TABLE ORDERS
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID);

SQL Server:
ALTER TABLE ORDERS
ADD FOREIGN KEY (customer_sid) REFERENCES CUSTOMER(SID);

SQL DROP TABLE >>