--------- **** 어떤 테이블에 제약조건을 추가하기 **** -----------
제약조건 추가시 NOT NULL 제약을 제외한 나머지 4개는 아래와 같이한다.
alter table 테이블명 add constraint 제약조건명 primary key(컬럼명);
alter table 테이블명 add constraint 제약조건명 unique(컬럼명);
alter table 테이블명 add constraint 제약조건명 check( ... );
alter table 테이블명 add constraint 제약조건명 foreign key(컬럼명) references 부모테이블명(식별자컬럼명);
alter table 테이블명 add constraint 제약조건명 foreign key(컬럼명) references 부모테이블명(식별자컬럼명) on delete casecade;
alter table 테이블명 add constraint 제약조건명 foreign key(컬럼명) references 부모테이블명(식별자컬럼명) on delete set null;
NOT NULL 제약을 추가할 때는 아래와 같이 한다.
alter table 테이블명 modify 컬럼명 [constraint 제약조건명] not null;
create table tbl_buseo
(buseono number(3)
, buname varchar2(40)
);
-- Table TBL_BUSEO이(가) 생성되었습니다.
-- Table TBL_BUSEO 에 생성된 제약조건 조회하기
select A.constraint_name, A.constraint_type, A.search_condition, A.r_constraint_name,
A.status, A.index_name, B.column_name, B.position
from user_constraints A JOIN user_cons_columns B
on A.constraint_name = B.constraint_name
where A.table_name = 'TBL_BUSEO';
alter table tbl_buseo
add constraint PK_tbl_buseo_buseono primary key(buseono);
-- Table TBL_BUSEO이(가) 변경되었습니다.
alter table tbl_buseo
modify buname constraint NN_tbl_buseo_buname not null;
-- Table TBL_BUSEO이(가) 변경되었습니다.
drop table tbl_jikwon purge;
create table tbl_jikwon
(jikwon_no number(5)
, jikname varchar2(30)
, email varchar2(30)
, jikkub varchar2(20)
, fk_buseono number(3)
);
-- Table TBL_JIKWON이(가) 생성되었습니다.
alter table tbl_jikwon add constraint PK_tbl_jikwon_jikwon_no primary key(jikwon_no);
-- Table TBL_JIKWON이(가) 변경되었습니다.
alter table tbl_jikwon add constraint UQ_tbl_jikwon_jikwon_email unique(email);
-- Table TBL_JIKWON이(가) 변경되었습니다.
alter table tbl_jikwon add constraint CK_tbl_jikwon_jikwon_jikkub check( jikkub in('사원','대리','과장','부장','사장') );
-- Table TBL_JIKWON이(가) 변경되었습니다.
alter table tbl_jikwon add constraint FK_tbl_jikwon_fk_buseono foreign key(fk_buseono) references tbl_buseo(buseono) on delete set null;
select A.constraint_name, A.constraint_type, A.search_condition, A.r_constraint_name,
A.status, A.index_name, B.column_name, B.position
from user_constraints A JOIN user_cons_columns B
on A.constraint_name = B.constraint_name
where A.table_name = 'TBL_JIKWON';
create table tbl_jikwon_2
(jikwon_no number(5) primary key -- 이렇게 해도 틀린 것은 아니지만 제약조건명이 SYS_C숫자 로 나오므로 유지관리가 힘들기 때문에 웬만하면 이렇게 쓰지 않는 것이 좋다.
, jikname varchar2(30) not null
, email varchar2(30) unique
, jikkub varchar2(20)
, fk_buseono number(3)
);
select A.constraint_name, A.constraint_type, A.search_condition, A.r_constraint_name,
A.status, A.index_name, B.column_name, B.position
from user_constraints A JOIN user_cons_columns B
on A.constraint_name = B.constraint_name
where A.table_name = 'TBL_JIKWON_2';
-----------------------------------------------------------
---------------- **** 제약조건명 변경하기 **** ----------------
-----------------------------------------------------------
alter table 테이블명
rename constraint 현재사용중인제약조건명 to 새로운제약조건명;
alter table tbl_jikwon_2
rename constraint SYS_C007788 to PK_TBL_JIKWON_2_JIKWON_NO;
-- Table TBL_JIKWON_2이(가) 변경되었습니다.
-- ' ' 는 사용하지 않는다.
---- *** 어떤 테이블에 제약조건을 삭제하기 *** ----
alter table 테이블명 drop constraint 제약조건명;
그런데 NOT NULL 제약은 위의 것처럼 해도 되고, 또는 아래처럼 해도 된다.
alter table 테이블명 modify 컬럼명 null;
어떤 테이블에 primary key 제약조건을 삭제할 경우에는 위의 것처럼 해도 되고, 또는 아래처럼 해도 된다.
alter table 테이블명 drop primary key;
select A.constraint_name, A.constraint_type, A.search_condition, A.r_constraint_name,
A.status, A.index_name, B.column_name, B.position
from user_constraints A JOIN user_cons_columns B
on A.constraint_name = B.constraint_name
where A.table_name = 'TBL_JIKWON';
alter table TBL_JIKWON drop constraint CK_TBL_JIKWON_JIKWON_JIKKUB;
-- Table TBL_JIKWON이(가) 변경되었습니다.
----------------------------------------------------------------
---------------- **** 제약조건의 내용 변경하기 **** ----------------
----------------------------------------------------------------
-- TBL_JIKWON 테이블에 있는 jikkub 컬럼에 check 제약의 내용을 변경하고자 한다.
-- 직급의 종류는 '사원','대리','과장','부장','사장' 에서
-- '사원','대리','과장', '차장' ,'부장','이사', '사장' 으로 변경하고자 한다.
-- !!!! 제약조건의 내용을 변경하는 명령어는 없다. !!!! --
-- 그러므로 해당 제약조건을 삭제하고 다시 새롭게 생성하면 된다.
alter table TBL_JIKWON add constraint CK_TBL_JIKWON_JIKWON_JIKKUB check( jikkub in ( '사원','대리','과장', '차장' ,'부장','이사', '사장' ) );
-- Table TBL_JIKWON이(가) 변경되었습니다.
---- *** 어떤 테이블에 존재하는 제약조건을 비활성화 시키기 *** ----
alter table 테이블명 disable constraint 제약조건명;
alter table TBL_JIKWON disable constraint CK_TBL_JIKWON_JIKWON_JIKKUB;
-- Table TBL_JIKWON이(가) 변경되었습니다.
-- check( jikkub in ( '사원','대리','과장', '차장' ,'부장','이사', '사장' ) ) 의 구애를 받지 않음
---- *** 어떤 테이블에 존재하는 제약조건을 활성화 시키기 *** ----
/*
alter table 테이블명 enable constraint 제약조건명;
*/
alter table TBL_JIKWON enable constraint CK_TBL_JIKWON_JIKWON_JIKKUB;
-- Table TBL_JIKWON이(가) 변경되었습니다.
-- check( jikkub in ( '사원','대리','과장', '차장' ,'부장','이사', '사장' ) ) 활성화
'SQL' 카테고리의 다른 글
| ======== **** INDEX(인덱스, 색인) **** ======== (0) | 2022.07.19 |
|---|---|
| 테이블에 새로운 컬럼 추가, 삭제 (0) | 2022.07.19 |
| NOT NULL 제약 (0) | 2022.07.15 |
| Constraint(제약조건) !!!! [개중요] !!!! (0) | 2022.07.14 |
| ****** PACKAGE(패키지) ****** (0) | 2022.07.14 |