# DATA INSERT
INSERT INTO hr.emp( id, name, day ) VALUES ( 1, '홍길동', sysdate);
INSERT INTO hr.emp( id, name, day ) VALUES ( 1, '박찬호', sysdate);
INSERT INTO hr.emp( id, name, day ) VALUES ( null, '손흥민', sysdate);
제약 조건이 없었을 때에는 NULL 값, 중복된 값도 허용 되어 SELECT 하면 실행창에서 확인가능했다.
DROP TABLE hr.dept PURGE;
■ 제약 조건
A. 테이블의 데이터에 대한 규칙을 만든다.
B. 데이터에 대한 품질을 향상시키기 위해서 만든다.
1. PRIMARY KEY
A. 테이블의 대표키
B. UNIQUE(유일한 값), NOT NULL(NULL 값 허용X)
C. 테이블당 하나만 생성 가능
D. 자동으로 UNIQUE INDEX 생성된다.
1) 제약 조건 정보 확인.
# 테이블의 제약조건 확인
SELECT * FROM user_constraints WHERE table_name = 'EMPLOYEES';
# 테이블의 컬럼 제약조건 확인
SELECT * FROM user_cons_columns WHERE table_name = 'EMPLOYEES';
- 제약 조건 추가
a. 문법 : ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 PRIMARY KEY(컬럼명);
ALTER TABLE hr.emp ADD CONSTRAINT emp_id_pk PRIMARY KEY(id);
# 테이블의 제약조건 확인
SELECT * FROM user_constraints WHERE table_name = 'EMP';
# 테이블의 컬럼 제약조건 확인
SELECT * FROM user_cons_columns WHERE table_name = 'EMP';
2) 인덱스 조건 정보 확인.
# 테이블의 index 조건 확인
SELECT * FROM user_indexes WHERE table_name = 'EMPLOYEES';
# index의 컬럼 제약조건 확인
SELECT * FROM user_ind_columns WHERE table_name = 'EMPLOYEES';
# 테이블의 index 조건 확인
SELECT * FROM user_indexes WHERE table_name = 'EMP';
# index의 컬럼 제약조건 확인
SELECT * FROM user_ind_columns WHERE table_name = 'EMP';
# PRIMARY KEY 제약 조건 → DATA 로드
INSERT INTO hr.emp( id, name, day ) VALUES ( 1, '홍길동', sysdate);
# 오류발생 : ORA-00001: unique constraint (HR.EMP_ID_PK) violated
이유) primary key 제약조건은 unique 한 값만 입력해야 한다. 즉, 중복된 값은 허용하지 않는다.
INSERT INTO hr.emp( id, name, day ) VALUES ( 1, '박찬호', sysdate);
# 오류발생 : ORA-01400: cannot insert NULL into ("HR"."EMP"."ID")
이유) primary key 제약조건은 null 값은 insert 허용하지 않음
INSERT INTO hr.emp( id, name, day ) VALUES ( null, '손흥민', sysdate);
# test 테이블 생성
CREATE TABLE hr.dept (
dept_id NUMBER,
dept_name VARCHAR2(30)
);
# 제약 조건 추가
a. 제약조건 이름을 명시하지 않으면 오라클에서 자동으로 'SYS_C숫자' 형식으로 생성해준다.
ALTER TABLE hr.dept ADD PRIMARY KEY(dept_id);
# 테이블의 제약조건 확인
SELECT * FROM user_constraints WHERE table_name = 'DEPT';
# 테이블의 컬럼 제약조건 확인
SELECT * FROM user_cons_columns WHERE table_name = 'DEPT';
# 테이블의 index 조건 확인
SELECT * FROM user_indexes WHERE table_name = 'DEPT';
# index의 컬럼 제약조건 확인
SELECT * FROM user_ind_columns WHERE table_name = 'DEPT';