제약조건이란
부적합한 데이터가 들어오는 것을 막기 위해서 사용하는 조건이다.
제약조건의 종류
제약조건 종류 |
설명 |
Primary key |
Not Null + Unique를 합쳐놓은 역할을 한다. = 컬럼에 null값이 들어오면 안되면서 중복된 값을 배재한다. (기본키, 테이블 당 한번 선언 가능.) |
Foreign key | 특정 테이블의 특정 컬럼을 참조한다. 참조하는 컬럼의 값만 사용하능하다. (외래키) |
Unique | 중복된 값이 들어오는 것을 막아준다. |
Not Null | 컬럼에 null값이 들어오는 것을 막아준다. |
Check | 해당 컬럼이 만족해야하는 조건문을 지정한다. |
제약조건 이름
제약조건을 사용할때 제약조건명은 사용자가 직접 지정하거나 oracle이 자동으로 부여해주도록 할 수 있다.
제약조건이름을 사용자가 직접 지정할때는 통상적으로 '테이블약자_컬럼약자_제약조건유형약자' 의 방식으로 지정한다.
ex)
emp_empid_pk
emp_did_fk
emp_email_uk
...
제약조건 생성
열 선언과 함께 생성할 경우(컬럼레벨의 문법)
create table 테이블명
(열1이름 열속성,
열2이름 열속성
CONSTRAINT 제약조건이름1 제약조건1
CONSTRAINT 제약조건이름2 제약조건2
CONSTRAINT t1_id_nn not null
... ,
열3이름 열속성,
...);
열2에 대한 속성을 지정하고 ,(콤마) 없이 바로 제약조건을 생성함으로서 열2에 대한 제약조건임을 알 수 있기 때문에 따로 열의 이름을 지정할 필요가 없다.
NOT NULL의 경우는 컬럼레벨의 문법으로만 사용 할 수 있다.
'CONSTRAINT 열이름' 의 경우 생략하여 생성 할 수도 있다.
ex)
열2이름 열속성 PRIMARY KEY
열 선언 완료 후 생성할 경우(테이블레벨의 문법)
create table 테이블명
(열1이름 열속성,
열2이름 열속성,
열3이름 열속성,
CONSTRAINT emp_emp_id_pk PRIMARY KEY (열이름)
...);
열 생성이 모두 완료 된 후 제약조건을 생성하는 경우로, 누구의 제약조건인지 알 수 없음으로 열이름을 따로 지정해 준다.
제약조건 추가
외래키
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건이름
FOREIGN KEY (컬럼명)
REFERENCES 부모테이블명(PK 컬럼명) [ON DELETE CASCADE / ON UPDATE CASCADE];
기본키
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건이름
PRIMARY KEY(컬럼명);
NOT NULL 제약 조건 추가
ALTER TABLE 테이블명
MODIFY 컬럼명 데이터타입
CONSTRAINT 제약조건이름 NOT NULL;
제약조건 이름 변경
ALTER TABLE 테이블명
RENAME CONSTRAINT 기존제약조건명 TO 새로운제약조건명;
제약조건 삭제
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건이름;
ALTER TABLE 테이블명
DROP PRIMARY KEY;
PRIMARY KEY만 제약조건의 이름 없이 제약조건 유형만으로 삭제 할 수 있다.
'프로그래밍 > DataBase' 카테고리의 다른 글
[DataBase]AS (0) | 2021.03.22 |
---|---|
[DataBase]DESC (0) | 2021.03.22 |
[DataBase]서브쿼리 (0) | 2021.03.10 |
[DataBase]Join (0) | 2021.03.10 |
[DataBase]DDL, DML, DCL (0) | 2021.03.08 |