Data Base/Oracle SQL

231019 Oracle SQL 제약 조건 PRIMARY KEY

잇꼬 2023. 10. 19. 18:13
728x90
반응형
SMALL

# 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';

 

728x90
반응형
LIST