[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 해준다.
'SQL쿼리' 카테고리의 다른 글
[Oracle] 오라클 - 참조 키(외래 키, FOREIGN KEY) / 참조 키 관계 (0) | 2022.08.10 |
---|---|
[Oracle] 오라클 - UNIQUE 제약 조건 / NOT NULL 제약 조건 / DEFAULT (0) | 2022.08.10 |
[Oracle] 오라클 - 데이터 딕셔너리 (Data Dictionary) (0) | 2022.08.10 |
[Oracle] 오라클 - DML (데이터 수정, 삭제 UPDATE/DELETE/MERGE) (0) | 2022.08.10 |
[Oracle] 오라클 - DML ( 데이터 추가 INSERT/서브쿼리/다중행 추가) (0) | 2022.08.10 |
블로그의 정보
개발자 미니민의 개발로그
mini_min