: 특정 컬럼에 대해 자료가 중복되지 않게 하는 것
(지정된 컬럼에는 유일한 값만이 저장되게 하는 것이다.)
UNIQUE는 해당 테이블에 있어서는 존재하는 값이 유일해야 한다.
만일 INSERT 또는 UPDATE시, 제약이 걸려 있는 컬럼에
동일한 데이터가 존재한다면 오류가 난다.
이 때, NULL값에 대해서는 UNIQUE 제약이 적용되지 않는다.
즉, NULL값은 데이터로 인식하지 않기 때문에
해당 컬럼에 NULL 데이터행이 여러개 존재 가능하다.
. 테이블 생성시 UNIQUE 설정
CREATE TABLE TEST_TABLE(
COLUMN VARCHAR2(30) CONSTRANINT COLUMN1_UNQ UNIQUE(COLUMN1)
);
//COLUMN1_UNQ = 제약조건 이름
. 테이블 생성 후에 UNIQUE 설정
. ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 UNIQUE(컬럼명);
ex) ALTER TABLE TABLE_TEST ADD CONSTRAINT COLUMN1_UNQ UNIQUE(COLUMN1);
. PRIMARY KEY 제약조건
. UNIQUE 제약조건 + NOT NULL 제약조건
. 컬럼명과 자료형을 기술한 다음 PRIMARY KEY를 기술하면 된다.
. PRIMARY KEY는 하나의 테이블에 있는 데이터들을
식별하기 위한 기준으로 인식되는 제약 조건이다.
한개의 테이블에 하나만 생성이 가능하며,
PRIMARY KEY는 NOT NULL + UNIQUE의 속성을 가진다.
즉, NULL 값이 있으면 안되고 해당 컬럼의 데이터는
중복되지 않고 유일해야 한다.
(foreign key는 여러개 존재가 가능하다.)
UNIQUE에서와 같이 여러 컬럼들을 조합해서 지정할 수 있다.
. 데이터베이스에 저장된 값들이 정확하고 일관성 있는
데이터임을 나타내는 의미
. 데이터베이스는 무결성이 보장되도록 여러 개체에
규정을 부여하여 운영한다.
. 즉, 필요없는 데이터는 걸러내고 필요한 데이터만 남아있는 상태를 말한다.
. 무결성을 유지하는 것은 데이터베이스 관리시스템(DBMS)의
중요한 기능이며, 주로 데이터에 적용되는 연산에
제한을 두어 데이터의 무결성을 유지한다.
. 무결성의 종류로는 개체무결성, 참조무결성, 도메인 무결성이 있다.
도메인 무결성 check, not null, default
객체 무결성 primary key, unique
참조 무결성 foreign key
. 도메인 무결성
: 속성이 정의되어 있는 영역을 벗어나지 않도록 규정하는 것이다.
도메인 무결성에는 check, default, not null 제약이 있다.
1.
create table test_44
( empno number(4),
ename varchar2(30) not null,
tel varchar2(30) default '010-777-7890',
sal number(5) default 450,
hiredate date default sysdate,
gender char(1)
constraint gender_check check(gender in('M', 'F')));
2.
select CONSTRAINT_NAME, CONSTRAINT_TYPE,
r_constraint_name,table_name
from USER_CONSTRAINTS;
3.
SQL> insert into test_44(empno, ename, gender) values(3400, 'korea', 'K');
insert into test_44(empno, ename, gender) values(3400, 'korea', 'K')
*
1행에 오류:
ORA-02290: 체크 제약조건(SCOTT.GENDER_CHECK)이 위배되었습니다.
SQL> insert into test_44(empno, ename, gender) values(3400, 'korea', 'K');
insert into test_44(empno, ename, gender) values(3400, 'korea', 'F')
== 제대로 된 행 만들어짐
(Check에 제약조건을 줘서 'M' 또는 'F'만 넣었기 때문에 오류가 난 것이다.
1.
create table test_55
( empno number(4),
ename varchar2(30) not null,
tel number(1)
constraint tel_check check(tel > 3));
2.
insert into test_55 values(345, 'seoul', 2);
insert into test_55 values(345, 'seoul', 2)
*
1행에 오류:
ORA-02290: 체크 제약조건(SCOTT.TEL_CHECK)이 위배되었습니다
(tel>3 이기 떄문에)
3.
SQL> insert into test_55 values(345, 'seoul', 7);
1 개의 행이 만들어졌습니다.
// tel(1) 이기 때문에 한 자릿수 숫자만 들어갈 수 있다,
10을 넘어서부터는 tel(2)로 수정하거나, 사용할 수 없다.
. 한 테이블의 제약 조건
select table_name, CONSTRAINT_NAME, CONSTRAINT_TYPE,
r_constraint_name
FROM USER_CONSTRAINTS
where table_name = 'TEST_55';
( WHERE 뒤에 오는 테이블명은 소문자로 써서는 안된다.)