반응형
/********************************************************************************************
-- Title : [10g] 제약조건 관리 - ver.dbrang
-- Reference : dbrang.tistory.com
-- Key word : constraint 제약조건 제약사항
********************************************************************************************/

/*
-- 제약조건 기술 데이터 사전 뷰
*/
-- 테이블 생성
CREATE TABLE scott.tbl90
( a NUMBER NOT NULL
, c VARCHAR2(5) NULL
, CONSTRAINT pk_tbl90 PRIMARY KEY (a)
) tablespace users;

CREATE TABLE scott.tbl91
( a NUMBER NOT NULL
, b VARCHAR2(10) NULL
, CONSTRAINT pk_tbl9 PRIMARY KEY (a)
, CONSTRAINT uk_tbl9 UNIQUE (b)
, CONSTRAINT fk_tbl91_tbl90 FOREIGN KEY (a) REFERENCES scott.tbl90(a)
) tablespace ts_data1;

-- 제약 확인
SELECT *
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL90', 'TBL91');


/*
-- 제약조건과 연관된 열 보기
*/
SELECT *
FROM DBA_CONS_COLUMNS
WHERE owner = 'SCOTT' AND table_name IN ('TBL90', 'TBL91');


/*
-- 제약 조건 정의
*/
-- 테이블 생성
CREATE TABLE scott.tbl93
( empno NUMBER(4) NULL      -- 왜 만들어질까?
, ename VARCHAR2(10)
, deptno NUMBER(7,2) NOT NULL
, CONSTRAINT tbl93_empno_pk PRIMARY KEY (empno)
);

-- 제약 확인
SELECT *
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL93');


/*
-- NOT NULL 제약조건 이름 추가
*/  
CREATE TABLE scott.tbl94
( empno NUMBER(4)
, ename VARCHAR2(10) NOT NULL
, deptno NUMBER(7,2) CONSTRAINT tbl94_deptno_nn NOT NULL
  -- 그냥 deptno NUMBER(7,2) NOT NULL하면?
);

-- 제약 확인
SELECT *
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL94');


/*
-- UNIQUE Key 제약조건
*/
CREATE TABLE scott.tbl95
( deptno NUMBER(2)
, dname VARCHAR2(14)
, loc VARCHAR2(13)
, CONSTRAINT dept_dname_uk UNIQUE(dname)
);

-- 제약 확인
SELECT *
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL95');


/*
-- PRIMARY KEY 제약조건
*/
CREATE TABLE scott.tbl96
( deptno NUMBER(2)
, dname VARCHAR2(14)
, loc VARCHAR2(13)
, CONSTRAINT dept_dname_uk22 UNIQUE(dname)
, CONSTRAINT dept_deptno_pk22 PRIMARY KEY(deptno)
);

-- 제약 확인
SELECT *
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL96');


/*
-- FOREIGN KEY 제약조건
*/
CREATE TABLE scott.tbl100
( a NUMBER NOT NULL
, c VARCHAR2(5) NULL
, CONSTRAINT pk_tbl100 PRIMARY KEY (a)
) tablespace users;
CREATE TABLE scott.tbl101
( a NUMBER NOT NULL
, b VARCHAR2(10) NULL
, CONSTRAINT pk_tbl101 PRIMARY KEY (a)
, CONSTRAINT uk_tbl101 UNIQUE (b)
, CONSTRAINT fk_tbl101_tbl100 FOREIGN KEY (a) REFERENCES scott.tbl100(a)
) tablespace ts_data1;

-- 제약 확인
SELECT *
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL101');

 
/*
 -- CHECK 제약조건
*/
CREATE TABLE scott.tbl55
( empno NUMBER(4)
, ename VARCHAR2(10) NOT NULL
, job VARCHAR2(9)
, hiredate DATE
, deptno NUMBER(7,2) NOT NULL
, CONSTRAINT ck_tbl55 CHECK (deptno BETWEEN 10 AND 99)
);

-- 제약 확인
SELECT *
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL55');
 
 
/*
-- 제약 조건의 추가
*/
ALTER TABLE scott.tbl100
ADD CONSTRAINT chk_tbl100_c CHECK (c > 100);

 
/*
-- 제약 조건의 삭제
*/
-- 제약 삭제
ALTER TABLE scott.tbl100
DROP CONSTRAINT chk_tbl100_c;

-- 제약 확인
SELECT *
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL101');

-- CASCADE 제약 삭제
ALTER TABLE scott.tbl100
DROP PRIMARY KEY CASCADE;
 
-- 제약 확인(Relation 자동 삭제 확인)
SELECT *
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL101');


/*
-- 제약조건 DISABLE/ENABLE
*/
-- 제약 확인
SELECT *
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL101');

-- DISABLE
ALTER TABLE scott.tbl101
DISABLE CONSTRAINT UK_TBL101 CASCADE;

-- 제약 확인(status)
SELECT owner, constraint_name, table_name, search_condition, status
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL101');

-- ENABLE
ALTER TABLE scott.tbl101
ENABLE CONSTRAINT UK_TBL101;

-- 제약 확인(status)
SELECT owner, constraint_name, table_name, search_condition, status
FROM DBA_CONSTRAINTS 
WHERE owner = 'SCOTT' AND table_name IN ('TBL101');


/*
-- UNUSED 설정 및 삭제
*/
-- 테이블생성
CREATE TABLE scott.tbl777
( a NUMBER NOT NULL
, b VARCHAR2(10) NOT NULL
, c NUMBER(12) NOT NULL
);

-- 컬럼 확인
SELECT *
FROM dba_tab_columns
WHERE owner = 'SCOTT' AND table_name = 'TBL777';

-- UNUSED 설정
ALTER TABLE scott.tbl777
SET unused COLUMN c;

-- 컬럼 확인
SELECT *
FROM dba_tab_columns
WHERE owner = 'SCOTT' AND table_name = 'TBL777';

-- UNUSED 컬럼 삭제
ALTER TABLE scott.tbl777
DROP unused columns;
 
반응형

+ Recent posts