쌓고 쌓다

[Oracle] 테이블에 무결성 제약조건 추가/변경 본문

프로그래밍/SQL

[Oracle] 테이블에 무결성 제약조건 추가/변경

승민아 2022. 12. 9. 17:06

무결성 제약 조건 추가

기존 테이블에 무결성 제약조건을 추가 생성한다.

ALTER TABLE table_name
ADD [CONSTRAINT constraint_name] constraint_type (column);

* NULL 무결성 제약조건은 ALTER TABLE ... MODIFY 명령문을 사용해야한다. 

Why? 'NULL 허용'을 'NULL 입력 불가' 상태로 변경을 의미하기 때문이다.

 

 

기본키(PRIMARY KEY), NOT NULL 추가

EX) grade 칼럼에 기본 키, losal과 hisal 칼럼에 NOT NULL 무결성 제약 조건 추가

CREATE TABLE test(
grade NUMBER(2),
losal NUMBER(5),
hisal NUMBER(5)
);

ALTER TABLE test
ADD CONSTRAINT test_pk PRIMARY KEY (grade);

ALTER TABLE test
MODIFY (losal CONSTRAINT test_losal_nn NOT NULL,
        hisal CONSTRAINT test_hisal_nn NOT NULL);

 

 

외래 키 추가 (FOREIGN KEY)

EX) userid와 idnum 칼럼에 고유 키 무결성 제약 조건을 추가하고,

profno 칼럼에 교수 테이블(professor)의 profno 칼럼을 참조하는 참조 무결성 제약조건을 추가.

-- test 테이블에 칼럼 추가
ALTER TABLE test
ADD (userid VARCHAR2(30),
     idnum VARCHAR2(13),
     profno NUMBER(4));
     
-- UNIQUE
ALTER TABLE test
ADD (CONSTRAINT test_userid_uk UNIQUE(userid),
     CONSTRAINT test_idnum_uk UNIQUE(idnum));
     
-- FOREIGN KEY
ALTER TABLE test
ADD (CONSTRAINT test_profno_fk FOREIGN KEY(profno) REFERENCES professor(profno);

 

EX) college 칼럼에 deptno 칼럼을 참조하는 참조 무결성 제약조건 추가

-- 칼럼 추가
ALTER TABLE test
ADD (deptno NUMBER(4),
     college NUMBER(4));
     
-- 외래 키 등록을 위해 deptno가 고유해야한다. 기본키 또는 UNIQUE를 걸어준다.
ALTER TABLE test
ADD CONSTRAINT test_deptno_uk UNIQUE (deptno);

-- 외래 키
ALTER TABLE test
ADD CONSTRAINT test_college_fk FOREIGN KEY(college) REFERENCES test(deptno);

 

+ 외래 키(FOREIGN KEY) 등록시 가져올 칼럼은 고유 또는 기본 키여야 한다.

외래 키를 등록할때 일반 칼럼을 REFERENCE하면

이 열목록에 대해 일치하는 고유 또는 기본 키가 없습니다. 에러가 뜬다.

 

 

 

Comments