Blog

[Spring][JPA]37 제약조건(Constraint)에 대한 정리

Category
Author
Tags
PinOnMain
1 more property
제약 조건(Constraint)
제약 조건(constraint)이란 데이터의 무결성을 지키기 위해, 데이터를 입력받을 때 실행되는 검사 규칙을 의미한다.
이러한 제약 조건은 CREATE 문으로 테이블을 생성할 때나 ALTER 문으로 필드를 추가할 때도 설정할 수도 있다.
NOT NULL
NULL 비허용
중복값 허용컬럼을 필수 필드화 시킬 때 사용.NOT NULL 제약조건 설정 시 해당 컬럼에는 꼭 데이터를 입력해야 함.
NOT NULL 제약 조건은 CREATE 문으로 테이블을 생성할 때나, 나중에 ALTER 문으로 추가할 수도 있다.
-- emp3라는 테이블을 만들고, ename 컬럼의 제약조건명을 emp_nm_ename 으로 하여 NOT NULL 제약조건을 설정하자. SQL> CREATE TABLE emp3( ename VARCHAR2(30) CONSTRAINT emp_nm_enmae NOT NULL ); -- 제약조건을 확인할 때는 USER_CONSTRAINTS 뷰를 통해서 확인할 수 있다. SQL> SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'EMP3';
Plain Text
복사
UNIQUE
데이터의 유일성을 보장(=> 중복되는 데이터가 존재할 수 없음)하고, 자동으로 인덱스가 생성.
unique은 null허용하지만, primary key는 null허용 안함
unique은 하나의 테이블에 여러개 올 수 있지만, primary key는 하나만 존재
UNIQUE 제약 조건을 설정하면, 해당 필드는 자동으로 보조 인덱스(INDEX)로 만들어짐.
만일 제약 조건에 이름을 설정하면, 다음과 같이 이름을 사용하여 해당 제약 조건을 삭제할 수 있다.
-- EMP2 테이블을 생성한 뒤, ALTER 를 이용해서 제약조건을 추가해준다. (제약조건명 : EMP2_UK_DEPTNO) ALTER TABLE EMP2 ADD CONSTRAINT EMP2_UK_DEPTNO UNIQUE(deptno); -- 제약조건을 삭제한다. ALTER TABLE EMP2 DROP CONSTRAINT EMP2_UK_DEPTNO;
Plain Text
복사
CHECK 조건
컬럼의 값을 어떤 특정 범위로 제한
-- EMP2 테이블의 comm 컬럼이 1~100 까지의 값만 가질 수 있도록 체크 제약조건 생성. ALTER TABLE EMP2 ADD CONSTRAINT EMP2_CK_COMM CHECK (comm >= 1 AND comm <= 100); -- 제약조건 삭제 ALTER TABLE EMP2 DROP CONSTRAINT EMP2_CK_COMM; -- 10000, 20000, 30000, 40000, 50000 의 값만을 가질 수 있는 체크 제약조건 생성. ALTER TABLE EMP2 ADD CONSTRAINT EMP2_CK_COMM2 CHECK comm IN (10000,20000,30000,40000,50000);
Plain Text
복사
DEFAULT (컬럼 기본값) 지정
데이터를 입력하지 않아도 지정된 값이 기본으로 입력된다.
default라고 값을 명시하면 기본값이 들어감
열이름이 명시되지 않으면 자동 기본값
값이 직접 명기되면 기본값은 무시됨.
alter table 테이블명 alter column 필드값 set default 10; insert into 테이블명 values("홍길동","24",default,“180”);
Plain Text
복사
-- hiredate 컬럼에 값을 입력하지 않아도 오늘 날짜가 입력된다. SQL> CREATE TABLE emp4( ... (컬럼생략) ..., hiredate DATE DEFAULT SYSDATE );
Plain Text
복사
PRIMARY KEY 지정
기본키 : UNIQUE + NOT NULL 의 결합과 같음.
기본키는 그 데이터 행을 대표하는 컬럼으로서의 역할을 수행하여 다른 테이블에서 외래키들이 참조할 수 있는 키로서의 자격을 가지고 있다. => 참조 무결성
UNIQUE 제약조건과 마찬가지로 기본키를 정의하면 자동으로 인덱스를 생성, 그 이름은 기본 키 제약조건의 이름과 같다.
INDEX?
검색 키로서 검색 속도를 향상시킨다. (UNIQUE, PRIMARY KEY 생성시 자동적으로 생긴다.)
-- PRIMARY KEY 생성 예제. 제약조건명 EMP5_PK_EMPNO CREATE TABLE EMP5( empno NUMBER CONSTRAINT EMP5_PK_EMPNO PRIMARY KEY ); -- 테이블 생성 후 ALTER 명령어로 PRIMARY KEY 생성 예제. ALTER TABLE EMP5 ADD CONSTRAINT EMP5_PK_EMPNO PRIMARY KEY (empno);
Plain Text
복사
만약 테이블에 각 필드값에 유니크한 값이 없다면, 필드 두 개를 묶어서 primary key로 지정 가능하다.
constraint pk_value primary key (필드1,필드2)
Plain Text
복사
FOREIGN KEY (외래키) 지정
기본키를 참조하는 컬럼 or 컬럼들의 집합 (외래키는 기본키나 유니크가 아니면 생성 제약)
외래키를 가지는 컬럼의 데이터 형은 외래키가 참조하는 기본키의 컬럼과 데이터 형이 일치해야 한다.
(이를 어기면 참조 무결성 제약에 의해 테이블을 생성할 수 없음 !)
외래키에 의해 참조되고 있는 기본키 : 삭제 불가 !!
on update cascade하면 기본키가 수정될 경우 외래키도 같이 수정해준다는 말
ON DELETE CASCADE 연산자와 함께 정의된 외래키의 데이터는 그 기본키가 삭제될 때 같이 삭제
- emp2 테이블의 deptno 컬럼이 dept 테이블의 deptno 컬럼을 참조하도록 외래키를 생성하자. ALTER TABLE EMP2 ADD CONSTRAINT emp2_fk_deptno FOREIGN KEY (deptno) REFERENCES TO DEPT(deptno); /* FOREIGN KEY 뒤의 (deptno)는 emp2 테이블의 deptno 컬럼 REFERENCES TO 뒤에는 참조할 테이블 명 (참조할 컬럼) 순서로 써준다. */
Java
복사