무결성 제약 조건
- NOT NULL
- UNIQUE : 모든 로우에 대해서 유일한 값을 갖도록 함
- PRIMARY KEY : NOT NULL + UNQUE
- FOREIGN KEY : 참조되는 테이블에 칼럼값이 항상 존재해야 한다.
- CHECK : 저장가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만 허용
칼럼레벨에서의 제약조건
create table dept_second(
dno number(2) constraint dept_second_pk primary key,
dname varchar2(14),
loc varchar(13));
테이블레벨에서의 제약조건-해당하는 컬럼의 이름을 () 안에 넣어줘야함 , NOT NULL 정의 불가
create table dept_third(
dno number(2),
dname varchar2(14),
loc varchar2(13),
constraint dept_third_pk primary key(dno));--해당칼럼 dno 괄호에 명시
제약조건 이름 지정 : constraint 테이블명_컬럼명_제약조건유형,이름지정하지 않을시 자동으로 SYS_Cn 생성
create table customer2(
id varchar2(20) constraint customer2_id_pk primary key,--컬럼레벨
pwd varchar2(20) constraint customer2_pwd_nn not null,
name varchar(20) constraint customer2_name unique);
테이블에 정의된 제약조건 확인
select table_name, constraint_name, constraint_type--P(=PK 기본키), R(=FK 참조키),C(=NOT NULL),U(=UNIQUE)
from USER_constraintS --사용자(system)가 소유한 '제약조건'정보
where table_name in('CUSTOMER2');--테이블명 대문자로 검색
NOT NULL 테이블레벨에서의 제약조건정의 불가
create table customer(
id varchar(20) not null,
pwd varchar(20) not null,
name varchar(20) not null,
phnoe varchar(30),
address varchar(100));
위의 테이블 데이터추가
insert into customer
values(null,null,null,'010-111-1111','seoul'); --에러
UNIQUE
null 허용 , 중복된 값 허용X
create table customer2(
id varchar2(20) constraint customer2_id_uk unique);
PRIMARY KEY (unique + not null)index번호 자동생성됨
컬럼레벨- pk
create table customer2(
id varchar2(20) constraint customer2_id_pk primary key);
테이블레벨 - pk2개 이상
create table customer2(
id varchar2(20),
pwd varchar2(20) constraint customer2_id_pwd_nn not null,
name varchar2(20)constraint customer2_id_name_nn not null,
phone varchar2(30),
address varchar2(100),
--테이블 레벨
constraint customer2_id_pk primary key(id) --★★해당하는 컬럼의 이름을 괄호에 넣어줘야 함
constraint customer2_id_pk primary key(id,name)--기본키가 2개 이상일때 테이블레벨 사용
);
FOREIGN KEY 제약조건
참조무결성 '사원테이블의 부서번호는 언제나 부서테이블에서 참조가 가능해야한다'
부모테이블의 컬럼값을 참조하며 그 컬럼은 기본키(primary key)나 유일키(unique)로 설정되어있어야 함
create table emp_second(
ename varchar2(19),
job varchar2(9)
dno number(2) constraint emp_second_dno_fk reference department);
CHECK 제약조건
데이터의 범위나 조건을 정의
currval, nextval, rownum 사용불가
sysdate 함수 사용 불가
create table emp_second(
eno number(4) constraint emp_second_eno_pk primary key,
ename varchar2(10),
salary number(7,2) constraint emp_second_salary_min check(salary>0));
--check제약 조건 salary가 0 이상이어야 함.
DEFAULT 제약조건
create table emp_second(
eno number(4) constraint emp_second_eno_pk primary key,
ename varchar2(10),
salary number(7,2) default 1000);
--default 값 넣는 방법
insert into emp_second(eno,ename,job,dno)values(6,'권','인사',10);--생략된 salary는 1000
insert into emp_second(6,'권','인사',default,10); --default 대신 1000입력됨
'DB > 오라클' 카테고리의 다른 글
[ORACLE]제약조건 변경 + ON DELETE (0) | 2022.08.12 |
---|---|
[ORACLE]집합연산자 UNION INTERSECT MINUS (0) | 2022.07.25 |
[ORACLE]DML(INSERT,UPDATE,DELETE) (0) | 2022.07.21 |
[ORACLE]데이터사전 (0) | 2022.07.19 |
[ORACLE]DDL 테이블 구조변경 ALTER TABLE (0) | 2022.07.19 |