개발자 미니민의 개발스터디

[Oracle] 오라클 - 데이터 제약 조건 / 기본키 설정

by mini_min

 

[Oracle]
오라클 - 데이터 제약 조건 / 기본키 설정

✔️ 제약 조건?

: 데이터베이스에 값을 추가할 때 제한하는 규칙이다.
: 데이터 무결성 제약 조건?
: 데이터베이스의 일관성을 보장하기 위해 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적, 명시적으로 정의하는 것을 말한다.
무결성 : 데이터베이스 내에 있는 데이터의 정확성 유지


💡 특징
: 테이블 생성시 무결성 제약조건으로 프로그래밍 과정 줄여준다.
: 데이터 오류 발생 가능성 줄여줌
: 일시적으로 활성화/비활성화 가능하다.

 


- NOT NULL 
: 널 값을 허용하지 않는다.

- 기본키 제약조건
: 하나의 컬럼 또는 두 개 이상의 컬럼을 조합해서 여러 행이 동일한 값 가질 수 없음
: 기본키는 하나의 테이블에 딱 하나만 지정 가능. NULL 값 허용 X

- 유니크 제약조건
: 하나 또는 두 개 이상의 컬럼을 조합해서 여러 행이 동일한 값 가질 수 없음
: 하나의 테이블에 2개 이상 지정 가능. NULL 값 허용 O

- 외래키
: 한 테이블의 값이 다른 테이블의 값과 일치해야한다.

- CHECK 제약조건
: 지정된 조건을 만족하는 값만 가질 수 있다.

 

 

 

✔️ 기본키 (PRIMARY KEY)

: 후보 키 중에 선택된 주 키로 NULL값 가질 수 없다.

: 컬럼이 중복적인 값을 가질 수 없다.

: 하나의 테이블에 1기본키 지정 가능

: 2개 이상 컬럼을 이용해서 기본키 지정 가능

✨ 제약 조건을 위반하지 않으면 수정 가능하다.

 

 

1) 테이블 생성과 동시에 기본 키 설정

: 하나의 컬럼에만 기본키를 부여 가능. (2개 이상 컬럼 이용해 기본키 불가)

 

-- 기본형식

CREATE TABLE 테이블명 (
               컬럼  데이터타입  [ CONSTRAINT 제약조건명 ]  PRIMARY KEY
                                 :
        );

 

 

⭐ 제약 조건 확인하는 식

SELECT * FROM user_constraints WHERE table_name = 'TEST1';
--제약 조건 이름, 제약 조건 타입은 확인 가능하나, 어떤 컬럼에 제약조건이 있는지는 확인 불가

SELECT * FROM user_cons_columns WHERE table_name = 'TEST1';    
--제약 조건 이름, 컬럼은 확인 가능하나, 어떤 제약조건인지 확인 불가

 

 

 

2) 테이블 레벨 방식의 PRIMARY KEY 설정

: 컬럼을 정의하고 마지막에 기본키를 지정

: 2개 이상의 복합키(컬럼) 으로 기본키를 지정할 수 있음

❌ 다만 2개 이상의 컬럼으로 기본키 주면 복잡해서 안좋음... 

 

-- 기본형식

CREATE TABLE 테이블명 (
               컬럼  데이터타입   [ 제약조건 ],
                                 :
               [ CONSTRAINT 제약조건이름 ] PRIMARY KEY (컬럼 [,컬럼])
        );
CREATE TABLE test4 (
		num NUMBER,
                code  VARCHAR2(50),
		name VARCHAR2(50) NOT NULL,
		CONSTRAINT pk_test4_num  PRIMARY KEY(num, code)
        );

 

 

 

3) 존재하는 테이블에 기본 키 설정

-- 기본형식

ALTER TABLE 테이블명 ADD [ CONSTRAINT 제약조건명 ]  PRIMARY KEY (컬럼 [,컬럼]);
CREATE TABLE test5 (
        id  VARCHAR2(50),
		name VARCHAR2(50) NOT NULL,
        pwd VARCHAR2(100) NOT NULL
        );
    
    INSERT INTO test5(id, name, pwd) VALUES (1, 'a', 'a');
    INSERT INTO test5(id, name, pwd) VALUES (1, 'b', 'bb');
    SELECT * FROM test5;
    
    ALTER TABLE test5 ADD PRIMARY KEY (id);
            --에러 : 기본키제약조건에 위배되는 데이터가 존재
💡 기본키 제약 조건을 주려고 했는데, 이미 해당 컬럼에 기본키 제약 조건을 줄 수 없는 데이터가 존재한다.
해당 컬럼의 값을 변경하고 기본키를 주는 방법을 써야함

 

 

 

4) 기본키 제약 조건 삭제

-- 기본형식

ALTER TABLE 테이블명 DROP PRIMARY KEY;
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
		-- 이름알면 삭제 가능. ALTER TABLE + 테이블 이름 주고 , DROP 해준다.

 

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기