この制約の主な目的は、データ整合性を維持することです。例えば、顧客テーブルと注文テーブルがある場合、注文テーブルの外部キーカラムは顧客テーブルの主キーを参照します。もし顧客が削除された場合、その顧客に関連する注文レコードも同時に削除するのが望ましい場合もありますが、場合によっては注文レコードを保持しながら、外部キーカラムの値をNULLにすることが便利な場合もあります。それにより、注文レコードと関連する顧客がない場合、NULL値をもつ注文レコードを特定できます。
「on delete set null」を使用するためには、以下の手順に従います。
-
外部キー制約を設定する: 子テーブルの外部キーカラムと親テーブルの主キーカラムの関連を定義します。この関連性により、親テーブルのレコードが削除された場合に、子テーブルの外部キーカラムに対する操作が実行されます。
-
"on delete set null"を指定する: 外部キー制約の設定時に、"on delete set null"という動作を指定します。これにより、親テーブルのレコードが削除された場合、関連する子テーブルの外部キーカラムの値がNULLに設定されます。
以下に、具体的なコード例を示します。
-- 親テーブルの作成
CREATE TABLE Customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(255)
);
-- 子テーブルの作成
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id) ON DELETE SET NULL
);
上記の例では、顧客テーブルと注文テーブルを作成しています。注文テーブルの外部キーカラムであるcustomer_id
は、顧客テーブルの主キーであるcustomer_id
を参照しています。また、外部キー制約の定義時にON DELETE SET NULL
を指定しています。
この設定により、顧客テーブルのレコードが削除された場合、関連する注文レコードのcustomer_id
カラムの値がNULLに設定されます。
これにより、データベースにおいてデータ整合性を保ちつつ、必要に応じて関連するレコードを特定することができます。
以上が、「on delete set null」の意味と使用方法についてのシンプルで簡単な解説とコード例です。