제약조건
컬럼에 대한 속성을 정의하고, 테이블의 부적절한 데이터가 입력되는 것을 방지하기 위해 정의한 규칙
데이터의 무결성을 보호하기 위해 사용 한다.
제약조건에 대해 오류가 발생했을 때, 제약조건에 이름이 오류내용에 출력이 되는데
오라클에서 자동으로 지정해준 이름이기 때문에, 코드번호로 적혀있어 외우고 있지 않으면 사용자는 알 수 없다.
사용자가 특정한 이름을 지정해주면 오류가 발생한 제약조건에 대해 더 빨리 찾을 수 있다.
제약조건 종류
Primary Key 제약 조건(관계형성관련 제약)
Foreign Key 제약 조건(관계형성관련 제약)
UNIQUE 제약조건
CHECK 제약 조건(MySQL 8.0.16부터 정식 지원)
DEFAULT 정의
NULL 값 허용
-- 제약조건 이름 지정 예시 1
CREATE TABLE TEST(
id NUMBER(5) CONSTRAINT pk_id PRIMARY KEY,
name VARCHAR(20),
title VARCHAR(30)
);
-- 제약조건 이름 지정 예시 2
CREATE TABLE TEST(
id NUMBER(5)
name VARCHAR(20),
title VARCHAR(30),
CONSTRAINT pk_id PRIMARY KEY (id)
);
이미 만든 제약조건을 삭제할 수 있고 이미 만들어진 컬럼에 제약조건을 추가 할 수 있다.
--제약조건 삭제
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건 이름;
-- 제약조건 추가
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건이름 제약조건 (컬럼명)
-- 예)
ALTER TABLE TEST ADD CONSTRAINT pk_id PRIMARY KEY (id)
--제약조건 확인
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME, A.*
FROM ALL_CONSTRAINTS A
WHERE TABLE_NAME='TEST_01';
--컬럼별 제약조건을 조회
SELECT * FROM ALL_CONS_COLUMNS WHERE CONSTRAINT_NAME='제약조건명';
--테이블 생성 후 기본 키 지정
alter table usertbl2 add constraint PK_userid primary key(userid);
--제약 조건 확인
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME,A.*
FROM ALL_CONSTRAINTS A
WHERE TABLE_NAME='TEST_01';
--컬럼별 제약조건을 조회
SELECT * FROM ALL_CONS_COLUMNS WHERE CONSTRAINT_NAME='제약조건명';
PRIMARY KEY
기본키라고도 부른다. PRIMARY KEY를 제약조건으로 가진 컬럼은 같은 데이터 중복불가와 NULL 값을 허용하지 않는다.
즉 UNIQUE + NOT NULL이 합쳐진 제약조건인 셈이다. 테이블 당 1개만 생성할 수 있고, 여러 컬럼을 묶어서 하나의
기본키로 만드는 것도 가능하다.
CREATE TABLE TEST (
id NUMBER(5) CONSTRAINT pk_id PRIMARY KEY,
name VARCHAR(20),
title VARCHAR(30)
);
NOT NULL
NOT NULL을 가진 컬럼은 반드시 데이터가 들어와야한다. 즉 NULL값을 허용하지 않는다.
CREATE TABLE TEST (
id NUMBER(5),
name VARCHAR(20),
title VARCHAR(30) NOT NULL
FOREIGN KEY
외래키라고 부르는 제약조건이다. 다른 테이블의 컬럼을
참조하는 기능을 하고 있다. 외래키가 정의된 테이블을 자식 테이블이라고 부른다.
참조하는 테이블의 컬럼과 외래키를 가지고 있는 컬럼의 데이터타입이 반드시 일치 해야한다.
중복 값을 허용하지 않는 유일한 데이터를 가진 컬럼, PRIMARY KEY나 UNIQUE를 가진 컬럼에만 참조가 가능
-- apple 테이블의 id 컬럼을 참조 방법 1
CREATE TABLE TEST(
id NUMBER(5) CONSTRAINT fk_id REFERENCES apple (id),
name VARCHAR(20),
title VARCHAR(30)
);
-- apple 테이블의 id 컬럼을 참조 하는 방법 2
CREATE TABLE TEST (
id NUMBER(5),
name VARCHAR(20),
title VARCHAR(30),
CONSTRAINT fk_id FOREIGN KEY(id) REFERENCES apple(id)
);
-- 외래키로 참조하고 있을 경우 참조를 당하는 부모 테이블의 컬럼의 값을 삭제할 수 없다.
-- 삭제하고 싶다면 외래키를 전부 삭제를 한 다음에는 삭제를 할 수가 있는데 굉장히 번거롭다.
-- 외래키를 가진 테이블의 따로 속성을 주면 부모 테이블과 자식 테이블의 값도 삭제 할 수 있다.
-- ON DELETE CASCADE : 부모 테이블을 삭제할 수 있으며 자식 테이블의 데이터도 삭제된다.
CREATE TABLE TEST (
id NUMBER(5),
name VARCHAR(20),
title VARCHAR(30),
CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES apple (id)
ON DELETE CASCADE
);
--ON DELETE SET NULL : 부모 테이블을 삭제 할 수 있으며 자식 테이블의 값이 NULL이 된다.
CREATE TABLE TEST (
id NUMBER(5),
name VARCHAR(20),
title VARCHAR(30),
CONSTRAINT fk_id FOREIGN KEY(id) REFERENCES apple (id)
ON DELETE SET NULL
);
CHECK
조건에 맞는지 안맞는지 체크를 해주는 제약조건이다. 조건과 맞지 않는다면 오류를 발생시킨다.
즉 입력할 수 있는 값의 범위를 제한할 수 있다. NOT NULL처럼 이미 조건에 맞지 않는 데이터가 있는 컬럼에 적용을 하면 오류가 발생한다.
CREATE TABLE TEST (
id NUMBER(5),
name VARCHAR(20) CHECK (name IN ('A', 'B'))
title VARCHAR(30)
);
-- A와 B 두개의 값만 허용한다.
CREATE TABLE TEST (
id NUMBER(5),
name VARCHAR(20),
title VARCHAR(30),
CONSTRAINT id_check (id >= 1 AND id <= 10)
);
--들어오는 데이터 값의 범위를 지정해 줄 수 있다.
DEFAULT
테이블에 데이터를 추가할 때 컬럼에 따로 데이터를 삽입하지 않았다면, NULL 값이 들어간다,
그 이유를 DEFAULT의 값이 NULL로 설정되어 있기 때문이다. 즉 기본 값을 설정해줄 수 있는 제약조건이다.
CREATE TABLE TEST (
id NUMBER(5) PRIMARY KEY,
name VARCHAR(20) DEFAULT '텅텅'
title VARCHAR(30)
);
'Database' 카테고리의 다른 글
[OracleDB] 시퀀스(Sequence) (0) | 2022.05.25 |
---|---|
[OracleDB] JOIN (0) | 2022.05.25 |
[OracleDB] SELECT (0) | 2022.05.15 |
[OracleDB] SQL 종류 (DDL.DML.DCL) (0) | 2022.05.14 |
[OracleDB] 기본 CRUD (0) | 2022.05.13 |