-- 무결성제약 조건에 위배됩니다
desc emp01;
insert into emp01 values(null, null, 1000, 'tester');
select * from emp01;
-- emp01 삭제
drop table emp01;
-- 필수 입력을 위한 제약 조건 :NOT null
-- emp01 테이블 생성 : empno, ename에 null값이 들어가지 않도록 제약
create table emp01(
empno number(4) not null,
ename varchar2(10) not null,
job varchar(9),
deptno number(2)
);
insert into emp01 values(null, null, 'tester', '10');
-- ORA-01400: NULL을 ("SCOTT"."EMP01"."EMPNO") 안에 삽입할 수 없습니다
-- 데이터의 중복 금지 : UNIQUE
drop table emp02;
create table emp02(
empno number(4) unique,
ename varchar2(9),
deptno number(2)
);
insert into emp02 values(1, 'tester', '10');
insert into emp02 values(1, 'tester2', '10');
-- ORA-00001: 무결성 제약 조건(SCOTT.SYS_C0011060)에 위배됩니다.
-- 기본키 제약 : 기본키 설정 > not null, unique
drop table emp04;
create table emp04(
empno number(4) primary key,
ename varchar2(10) not null
);
insert into emp04 values(null, 'test'); -- null 에러
insert into emp04 values(1, 'test');
insert into emp04 values(1, 'test'); -- 무결성제약조건 에러
-- 외래키 제약 : 참조하는 테이블과 컬럼을 정의 (reference's')
drop table emp05;
create table emp05(
empno number(4) primary key,
ename varchar2(10) not null,
deptno number(2) references dept(deptno)
);
-- emp05의 deptno테이블에는 emp테이블의 dept에 있는 값만 들어갈 수있다
-- 즉 10,20,30만 들어갈 수 있다. (40,50 X)
insert into emp05 values(1, 'test', 10);
insert into emp05 values(1, 'test', 40); -- 40X 무결성 에러
-- check : 특정 범위 제한
create table emp06 (
empno number(4) primary key,
ename varchar2(10) not null,
sal number(7,2) check (sal>=800)
);
insert into emp06 values (1, 'test', 1000);
insert into emp06 values (2, 'test', 100); -- 체크 제약조건 위배
-- default : insert 시에 자동으로 등록되는 데이터 정의
drop table emp07;
create table emp07(
empno number(4) primary key,
ename varchar2(10) not null,
sal number(7,2) check (sal>=500),
comm number(7,2) default 0, -- number와 타입은 맞춰줘야한다.
hiredate date default sysdate
);
insert into emp07 (empno,ename,sal) values (1,'test',1000);
select * from emp07;
/*
EMPNO ENAME SAL COMM HIREDATE
---------- ---------- ---------- ---------- --------
1 test 1000 0 20/11/12
*/
두 개의 제약조건 (not null과 unique는 primary key로 사용가능하지만 예시로 만듦)
-- empno가 not null과 unique 제약을 동시에 적용
drop table emp03;
create table emp03(
empno number(4) not null unique,
ename varchar2(9) not null
);
insert into emp03 values(null, 'test1');
insert into emp03 values(1, 'test1');
insert into emp03 values(2, 'test1');
select * from emp03;
-- 제약조건에 이름 부여
drop table emp08;
create table emp08(
empno number(4) constraint emp08_empno_pk primary key,
ename varchar2(10) constraint emp08_ename_nn not null,
sal number(7,2) constraint emp08_sal_CK500 check (sal>=500),
comm number(7,2) default 0, -- number와 타입은 맞춰줘야한다.
hiredate date default sysdate
);
insert into emp08 (empno,ename,sal) values (1,'test',1000);
-- 테이블 레벨에서 제약조건 정의
drop table emp09;
create table emp09(
empno number(4), -- not null은 컬럼레벨에서 해야함
ename varchar2(10) not null,
job varchar2(9),
deptno number(10), -- 컬럼정의끝
constraint emp09_empno_pk primary key (empno),
constraint emp09_job_uk unique(job),
constraint emp09_depno_fk foreign key (deptno) references dept(deptno)
);
insert into emp09 values (null, null, 'job1', 50);
insert into emp09 values (1, null, 'job1', 40);
insert into emp09 values (1, 'tester', 'job1', 40);
insert into emp09 values (1, 'tester', 'job1', 40);
'DB > Oracle SQL' 카테고리의 다른 글
[ORACLE SQL] 가상테이블 / 뷰(view) & 로우넘(rownum) (0) | 2020.11.13 |
---|---|
[ORACLE SQL] 트랜잭션 (0) | 2020.11.13 |
[ORACLE SQL] DML / INSERT / UPDATE (0) | 2020.11.12 |
[ORACLE SQL] DDL _ALTER TABLE / 테이블 칼럼 추가/변경/삭제 (0) | 2020.11.12 |
[ORACLE SQL] DDL _ CREATE TABLE / 테이블 생성 (0) | 2020.11.12 |
[ORACLE SQL] 서브쿼리 / 부속질의 (0) | 2020.11.11 |
[ORACLE SQL] 서브쿼리 (0) | 2020.11.11 |