-
Oracle - 제약조건 추가하기DataBase/Oracle 2024. 9. 12. 23:00반응형
Oracle - 제약조건 추가하기
1. 테이블 생성과 기본적인 NOT NULL 제약 조건 추가
CREATE TABLE test_table20( data1 NUMBER, data2 NUMBER, data3 NUMBER, data4 NUMBER, data5 NUMBER, data6 NUMBER ); -- Null 제약 조건 추가 (data1에 NULL 값을 허용하지 않음) ALTER TABLE test_table20 MODIFY data1 NOT NULL; -- NULL 값 삽입 시도 (에러 발생) INSERT INTO test_table20 (data1) VALUES (null);
설명: data1 컬럼에 NOT NULL 제약 조건을 추가함으로써, NULL 값이 입력되지 않도록 설정했습니다. NULL 값을 삽입하려고 하면 에러가 발생합니다.
2. PRIMARY KEY 제약 조건 추가 및 중복된 값 삽입
-- Primary key 제약 조건 추가 (data2 컬럼에 기본 키 설정) ALTER TABLE test_table20 ADD CONSTRAINT test_table20_data2_pk PRIMARY KEY(data2); -- 데이터 삽입 (성공) INSERT INTO test_table20 (data1, data2) VALUES(1, 10); -- 중복된 PRIMARY KEY 삽입 시도 (에러 발생) INSERT INTO test_table20 (data1, data2) VALUES(2, 10); -- NULL 값 삽입 시도 (에러 발생) INSERT INTO test_table20 (data1, data2) VALUES(3, null);
설명: data2 컬럼에 PRIMARY KEY 제약 조건을 추가하여 중복된 값이나 NULL 값이 입력될 수 없게 했습니다. 중복된 값이나 NULL 값을 삽입하려 하면 에러가 발생합니다.
3. FOREIGN KEY 제약 조건 추가 및 참조된 테이블에서의 제약 사항
-- FOREIGN KEY 제약 조건 추가 (data3 컬럼이 emp 테이블의 empno를 참조) 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);
설명: data3 컬럼에 FOREIGN KEY 제약 조건을 추가하여 emp 테이블의 empno 컬럼에 있는 값만 입력되도록 했습니다. 참조되지 않은 값을 삽입하려 하면 에러가 발생합니다.
4. UNIQUE 제약 조건 추가 및 중복된 값 삽입 시도
-- UNIQUE 제약 조건 추가 (data4 컬럼에 중복된 값이 들어갈 수 없음) ALTER TABLE test_table20 ADD CONSTRAINT test_table20_data4_uk UNIQUE(data4); -- 데이터 삽입 (성공) INSERT INTO test_table20 (data1, data2, data4) VALUES(12, 102, 100); -- 중복된 UNIQUE 값 삽입 시도 (에러 발생) INSERT INTO test_table20 (data1, data2, data4) VALUES(13, 103, 100);
설명: data4 컬럼에 UNIQUE 제약 조건을 추가하여 중복된 값이 들어가지 않도록 설정했습니다. 중복된 값을 삽입하려 하면 에러가 발생합니다.
5. CHECK 제약 조건 추가 및 유효성 검사
-- CHECK 제약 조건 추가 (data5 값이 1과 10 사이여야 함) ALTER TABLE test_table20 ADD CONSTRAINT test_table20_data5_ck CHECK(data5 BETWEEN 1 AND 10); -- 데이터 삽입 (성공) INSERT INTO test_table20 (data1, data2, data5) VALUES(14, 104, 5); -- 유효하지 않은 값 삽입 시도 (에러 발생) INSERT INTO test_table20 (data1, data2, data5) VALUES(15, 105, 20);
설명: data5 컬럼에 CHECK 제약 조건을 추가하여 값이 1과 10 사이여야만 저장되도록 했습니다. 유효하지 않은 값을 삽입하려 하면 에러가 발생합니다.
6. IN 조건을 사용한 CHECK 제약 조건
-- CHECK 제약 조건 추가 (data6 값이 10, 20, 30 중 하나여야 함) 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);
설명: data6 컬럼에 IN 조건을 사용하는 CHECK 제약 조건을 추가하여 10, 20, 30 중 하나의 값만 입력되도록 했습니다. 유효하지 않은 값이 삽입되면 에러가 발생합니다.
7. 제약 조건 비활성화 및 활성화
-- PRIMARY KEY 제약 조건 비활성화 ALTER TABLE test_table40 DISABLE CONSTRAINT test_table40_data1_pk; -- 데이터 삽입 (성공, 중복된 값 허용) INSERT INTO test_table40 (data1) VALUES(100); -- PRIMARY KEY 제약 조건 재활성화 ALTER TABLE test_table40 ENABLE CONSTRAINT test_table40_data1_pk; -- 데이터 삽입 시도 (에러 발생, 중복된 값 불허) INSERT INTO test_table40 (data1) VALUES(100);
설명: PRIMARY KEY 제약 조건을 비활성화하면 중복된 값을 허용할 수 있지만, 다시 활성화하면 중복된 값을 삽입할 수 없습니다.
반응형'DataBase > Oracle' 카테고리의 다른 글
Oracle - 인덱스(index) (0) 2024.09.25 Oracle - 테이블 구조 변경하기 (0) 2024.09.19 Oracle - 제약조건 (0) 2024.09.10 Oracle - 테이블 생성 , 데이터타입 (0) 2024.09.03 Oracle - delete 정복하기 (0) 2024.09.03