参照制約を追加するには
提供:DB2逆引きWiki
【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の行は削除できません。
注意
- 参照先の列は主キーもしくは一意制約を持つこと。