データベースの外部キー制約における「on delete set null」の意味と使用方法


この制約の主な目的は、データ整合性を維持することです。例えば、顧客テーブルと注文テーブルがある場合、注文テーブルの外部キーカラムは顧客テーブルの主キーを参照します。もし顧客が削除された場合、その顧客に関連する注文レコードも同時に削除するのが望ましい場合もありますが、場合によっては注文レコードを保持しながら、外部キーカラムの値をNULLにすることが便利な場合もあります。それにより、注文レコードと関連する顧客がない場合、NULL値をもつ注文レコードを特定できます。

「on delete set null」を使用するためには、以下の手順に従います。

  1. 外部キー制約を設定する: 子テーブルの外部キーカラムと親テーブルの主キーカラムの関連を定義します。この関連性により、親テーブルのレコードが削除された場合に、子テーブルの外部キーカラムに対する操作が実行されます。

  2. "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」の意味と使用方法についてのシンプルで簡単な解説とコード例です。