MySQLの外部キー制約を設定する方法
MySQLでは、外部キー制約を以下の手順で設定できます。
- テーブル間に関連があることを確認してください。外部キー制約は、関連性のあるテーブル間でしか設定できません。通常、外部キー制約は、あるテーブルの列を別のテーブルの主キーまたはユニークインデックス列に関連付けるために使用されます。
- テーブル作成時に外部キー制約を定義する。外部キー制約は CREATE TABLE 時に FOREIGN KEY キーワードを使って定義できる。構文は次の通り。
CREATE TABLE 表名(
列名 数据类型,
列名 数据类型,
...
FOREIGN KEY (列名) REFERENCES 另一个表名(另一个表的列名)
);
注文テーブルのcustomer_idカラムと、顧客テーブルのcustomer_idカラムを関連付けるということです。
CREATE TABLE orders (
order_id INT,
order_date DATE,
customer_id INT,
...
FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
);
- ALTER TABLE
ALTER TABLE 表名
ADD FOREIGN KEY (列名) REFERENCES 另一个表名(另一个表的列名);
例えば、下記の例では、「orders」テーブルの「customer_id」列と「customers」テーブルの「customer_id」列を対応付けます:
ALTER TABLE orders
ADD FOREIGN KEY (customer_id) REFERENCES customers (customer_id);
- 外部キー制約を設定する際に、動作を定義するためのオプションを使用することもできます。以下に一般的なオプションをいくつか示します。
- ON DELETE: 主テーブルの行が削除されたときに外部キー制約の振る舞いを定義します。オプション値には、CASCADE(関連行を連鎖削除)、SET NULL(外部キー列をNULLに設定)、RESTRICT(削除操作を阻止する)があります。
- ON UPDATE:主テーブル内の行が更新されたときに外部キー制約がどう振る舞うか定義します。 オプション値には、CASCADE(関連行の連鎖更新)、SET NULL(外部キー列をNULLに設定)、RESTRICT(更新操作の防止)があります。
たとえば、以下のサンプルでは、関連する customers テーブルの行が削除された場合に、 orders テーブルの外来キー列 customer_id を NULL に設定します。
ALTER TABLE orders
ADD FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
ON DELETE SET NULL;
以上の手順を踏むことで、MySQLで外部キー制約を設定し、データの整合性と一貫性を確保できます。