Oracle Database 35. 제약조건 추가하기
제약조건 추가하기
- 테이블을 생성한 후 제약 조건을 추가하거나 제거하고 싶다면 alter구문을 이용한다.
- alter table 테이블명
add 제약조건 - alter table 테이블명
drop 제약조건
ex)
-- 제약조건 추가하기
create table test_table20(
data1 number,
data2 number,
data3 number,
data4 number,
data5 number,
data6 number
);
-- null 제약조건 추가
alter table test_table20
modify data1 not null;
insert into test_table20 (data1)
values (null);
-- primary key 제약조건 추가
alter table test_table20
add constraint TEST_TABLE20_DATA2_PK primary key(data2);
insert into test_table20 (data1, data2)
values (1, 10);
insert into test_table20 (data1, data2)
values (2, 10);
insert into test_table20 (data1, data2)
values (3, null);
-- 외래키 제약조건 추가
alter table test_table20
add constraint TEST_TABLE20_DATA3_FK foreign key(data3)
references emp(empno);
insert into test_table20 (data1, data2, data3)
values (10, 100, 7369);
insert into test_table20 (data1, data2, data3)
values (11, 101, 100);
-- unique 제약조건 추가
alter table test_table20
add constraint TEST_TABLE20_DATA4_UK unique(data4);
insert into test_table20 (data1, data2, data4)
values (12,102,100);
insert into test_table20 (data1, data2, data4)
values (13,103,100);
-- check 제약조건
alter table test_table20
add constraint TEST_TABLE20_DATA5_CK check(data5 between 1 and 5);
insert into test_table20 (data1, data2, data5)
values (14, 104, 5);
insert into test_table20 (data1, data2, data5)
values (15, 105, 20);
alter table test_table20
add constraint TEST_TABLE20_DATA6_CK check(data6 in(10,20,30));
insert into test_table20 (data1, data2, data6)
values (16, 106, 20);
insert into test_table20 (data1, data2, data6)
values (17,107,50);
select * from test_table20;
ex)
-- 제약조건 제거
create table test_table30(
data1 number not null,
data2 number constraint TEST_TABLE30_DATA2_PK primary key,
data3 number constraint TEST_TABLE30_DATA3_FK
references emp(empno),
data4 number constraint TEST_TABLE30_DATA4_UK unique,
data5 number constraint TEST_TABLE30_DATA5_CK
check (data5 between 1 and 10),
data6 number constraint TEST_TABLE30_DATA6_CK
check (data6 in (10,20,30))
);
-- not null 제약조건 수정
alter table test_table30
modify data1 null;
insert into test_table30 (data1,data2)
values (null, 100);
-- primary key 제약 조건 제거
alter table test_table30
drop constraint TEST_TABLE30_DATA2_PK;
insert into test_table30 (data2)
values (null);
-- 외래키 제약조건 제거
alter table test_table30
drop constraint TEST_TABLE30_DATA3_FK;
insert into test_table30 (data3)
values (1000);
-- unique 제약조건 제거
alter table test_table30
drop constraint TEST_TABLE30_DATA4_UK;
insert into test_table30 (data4)
values (100);
insert into test_table30 (data4)
values (100);
-- check 제약조건 제거
alter table test_table30
drop constraint TEST_TABLE30_DATA5_CK;
alter table test_table30
drop constraint TEST_TABLE30_DATA6_CK;
insert into test_table30 (data5, data6)
values (20, 100);
select * from test_table30;
ex)
-- 제약조건 활성/비활성
create table test_table40(
data1 number constraint TEST_TABLE40_DATA1_PK primary key
);
insert into test_table40 (data1)
values (100);
insert into test_table40 (data1)
values (100);
alter table test_table40
disable constraint TEST_TABLE40_DATA1_PK;
insert into test_table40 (data1)
values (100);
select * from test_table40;
alter table test_table40
enable constraint TEST_TABLE40_DATA1_PK;
-- 활성화시 하나라도 제약조건에 위배되는 값이 있으면 에러가 뜬다.
delete from test_table40;
insert into test_table40 (data1)
values (100);
insert into test_table40 (data1)
values (200);
select * from test_table40;
alter table test_table40
enable constraint TEST_TABLE40_DATA1_PK;
insert into test_table40 (data1)
values (100);