制約スクリプト

※コピーすると改行が抜ける場合はソースをダブルクリックして強調表示を外してからコピーしてください

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
--テーブル作成時に制約を付与する(制約名は自動生成)
CREATE TABLE TAB1 (
 COL1 NUMBER PRIMARY KEY, --プライマリキー
 COL2 NUMBER NOT NULL,    --NOT NULL
 COL3 NUMBER UNIQUE,      --ユニークキー
 COL4 NUMBER DEFAULT 1,   --デフォルト値
 COL5 NUMBER CHECK(COL5 IN (1,2,3)) --チェック
);
 
--外部参照表
DROP TABLE CONST2;
DROP TABLE CONST1;
CREATE TABLE CONST1 (COL1 NUMBER PRIMARY KEY);
CREATE TABLE CONST2 (
 COL1 NUMBER,
 CONSTRAINTS COL1_FK FOREIGN KEY(COL1) REFERENCES CONST1(COL1));
--参照値削除時にカスケードする場合
-- CONSTRAINTS COL1_FK FOREIGN KEY(COL1) REFERENCES CONST1(COL1) ON DELETE CASCADE);
--参照値削除時にNULL化する場合
-- CONSTRAINTS COL1_FK FOREIGN KEY(COL1) REFERENCES CONST1(COL1) ON DELETE SET NULL);
 
--プライマリキー追加
ALTER TABLE DEPT ADD CONSTRAINT PK_DEPTNO PRIMARY KEY(DEPTNO);
 
--ユニークキー追加(遅延可)
ALTER TABLE DEPT ADD CONSTRAINT DNAME_UK UNIQUE(DNAME) DEFERRABLE;
 
--チェック
ALTER TABLE EMP ADD CONSTRAINT SAL_CK CHECK(SAL>100) DEFERRABLE DISABLE;
 
--外部キー
ALTER TABLE EMP ADD CONSTRAINT DEPTNO_FK FOREIGN KEY(DEPTNO)
 REFERENCES DEPT(DEPTNO) DEFERRABLE;
 
--外部キー(カスケード有)
ALTER TABLE TAB1 ADD CONSTRAINT TAB1_FK FOREIGN KEY(COL1)
 REFERENCES TAB2(COL1) ON DELETE CASCADE;
 
--NOT NULL制約追加
ALTER TABLE TAB1 MODIFY (COL2 NOT NULL);
ALTER TABLE TAB1 MODIFY COL2 CONSTRAINT NN_TABLE1_COL2 NOT NULL;
 
--デフォルト値追加
ALTER TABLE TAB1 MODIFY (COL2 DEFAULT 1);
 
--制約の削除
ALTER TABLE TAB1 DROP CONSTRAINTS CK_TAB1;
 
--RENAME
ALTER TABLE TAB1 RENAME CONSTRAINTS <旧制約名>; TO <新制約名>;
 
--遅延制約の有効化(トランザクションのcommit時にチェック)
SET CONSTRAINTS DEPTNO_FK DEFERRED;
 
--制約を有効にするが、既存行のチェックは行わない
ALTER TABLE EMP ENABLE NOVALIDATE CONSTRAINTS SAL_CK;
 
--制約の無効化
ALTER TABLE  TAB1 DISABLE CONSTRAINT CK_TAB1;
 
--制約関連のディクショナリ
SELECT * FROM DBA_CONSTRAINTS;
SELECT * FROM DBA_INDEXES;
SELECT * FROM DBA_CONS_COLUMNS;

マニュアル

一覧(10.2)
リファレンス 10g リリース2(10.2)
SQL リファレンス 10g リリース2(10.2)
★ORACLE案件承ります