主キーの付与方法
主キーの付与方法について説明します。
以下の制約が全く付与されていないテーブル(社員)に主キーを付与ししていきます。
No | 項目名(論理) | 項目名(物理) | 型 | 制約 |
---|---|---|---|---|
1 | 社員番号 | EMP_NO | INT | |
2 | 氏名 | EMP_NAME | VARCHAR | |
3 | 部門番号 | DIV_NO | INT | |
4 | 削除フラグ | DEL_FLG | INT |
主キーの付与
ここでは主キーを付与するSQLを説明します。
構文は以下の通りです。
構文の詳細は公式サイトを参照ください。
【文法】
ALTER TABLE テーブル名 ADD CONSTRAINT 主キー制約名 PRIMARY KEY (主キー対象項目 [,主キー対象項目...])【実行例】
実際にSQLを実行し主キーを付与します。
SQLは以下の通りです。
ALTER TABLE MST_EMP ADD CONSTRAINT PK_EMP PRIMARY KEY (EMP_NO) ;
ここで、SQLを実行したいところですが、そのまま実行すると、該当項目はNULL値が設定される可能性があるということで
エラーが発生します。
主キーとNot Nullの制約が完全に独立しているんですね。
SQL> ALTER TABLE MST_EMP 2 ADD CONSTRAINT PK_EMP PRIMARY KEY (EMP_NO) 3 ; 行 1 の近くでエラー: SQL0542N "EMP_NO" という名前の列は、NULL 値を含む可能性があるので、主キーおよびユニーク・キー 制約の列にすることができません。
というわけで、主キーと付与する対象の項目にNot Null制約をつけます。
また、表の構造がかわったので再編成(REORG)も実行します。
ALTER TABLE MST_EMP ALTER COLUMN EMP_NO SET NOT NULL ; REORG TABLE MST_EMP ;
実行結果は以下になります。
SQL> ALTER TABLE MST_EMP ALTER COLUMN EMP_NO SET NOT NULL 2 ; DB250000I: コマンドは正常に完了しました。 SQL> REORG TABLE MST_EMP 2 ; DB250000I: コマンドは正常に完了しました。
あらためて、主キー制約を付与します。
問題なく主キーが付与されました。
カタログを検索すると主キーが追加されていることが確認できます。
SQL> ALTER TABLE MST_EMP 2 ADD CONSTRAINT PK_EMP PRIMARY KEY (EMP_NO) 3 ; DB250000I: コマンドは正常に完了しました。 SQL> SELECT NAME, CONSTRAINTYP 2 FROM SYSIBM.SYSTABCONST 3 WHERE TBNAME = 'MST_EMP' 4 ; NAME CONSTRAINTYP ---------------------------------------------------------- ------------- PK_EMP P
主キーの削除
主キーの削除のSQLを説明します。
構文は以下の通りです。
【文法】
ALTER TABLE 表名 DROP CONSTRAINT 主キー名【実行例】
実際にSQLを実行し主キーを削除します。
SQLは以下の通りです。
ALTER TABLE MST_EMP DROP CONSTRAINT PK_EMP ;
SQLの実行結果は以下の通りです。
これでPKが削除されました。
SQL> ALTER TABLE MST_EMP 2 DROP CONSTRAINT PK_EMP 3 ; DB250000I: コマンドは正常に完了しました。 SQL> SELECT NAME, CONSTRAINTYP 2 FROM SYSIBM.SYSTABCONST 3 WHERE TBNAME = 'MST_EMP' 4 ; 取り出された行はありません。