【DB2逆引きリファレンス目次】 【DB2逆引きリファレンス目次#実装編】 【DB2逆引きリファレンス目次#制約】
前提
- データベース接続が必要
- 以下のいずれかが必要: SYSADM権限, DBADM権限, 制約を追加する表に対するCONTROL特権, 制約を追加する表のスキーマに対するALTERIN特権
解説
表に対して参照制約を追加するには、ALTER TABLEを用います。
ALTER TABLE 表名 ADD [CONSTRAINT 制約名 ]
FOREIGN KEY ( 外部キー指定 )
REFERENCES 参照表名 ( 参照列名 )
[ON DELETE 削除時アクション指定 ]
[ON UPDATE 更新時アクション指定 ]
[NOT ENFORCED]
表名
: 参照制約を追加する表の名前を指定します。
CONSTRATINT 制約名
: 追加する一意制約の名前を指定します。指定しない場合は自動的に付与されます。
外部キー指定
: 外部キーとして用いる列の名前を指定します。複数指定する場合はカンマで区切って並べます。
参照表名
: 参照する表の名前を指定します。
参照列名
: 参照する列を指定します。指定の形式は外部キーの場合と同じです。
ON DELETE 削除時アクション指定
: 参照先の行が削除されようとした時のアクションを指定します。
NO ACTION
: 何もしません。これがデフォルトです。
RESTRICT
: 参照している行がある場合は行の削除を許可しません。
CASCADE
: 参照している行も一緒に削除します。
SET NULL
: 参照している外部キーの値にNULLをセットします。
ON UPDATE 更新時アクション指定
: 参照先の行が更新された時のアクションを指定します。
NO ACTION
: 何もしません。これがデフォルトです。
RESTRICT
: 参照している行がある場合は行の変更を許可しません。
CASCADE
: 参照している外部キーの値も一緒に変更します。
SET NULL
: 参照している外部キーの値にNULLをセットします。
NOT ENFORCED
: 参照制約はデータベースによりチェックされませんが、最適化の際の参考情報として利用されます。
使用例
参照制約(ここでは表parentsの主キーidに対する外部キーparentid)を表(ここではchildren)に追加する例。
db2 ==> ALTER TABLE children ADD FOREIGN KEY (parentid) REFERENCES parents (id) ON DELETE RESTRICT↓
ON DELETE RESTRICTを指定しているため、childrenから参照されているparentsの行は削除できません。
注意
- 参照先の列は主キーもしくは一意制約を持つこと。