일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Dependency Injection
- POJO
- unix
- java
- Spring JDBC
- Di
- JDBC TEMPLATE
- Ubunt
- 컨테이너
- 리눅스
- Linux
- Framework
- 프로퍼티
- AOP
- XML
- @Spring-Test
- Spring Boot
- SpringJDBC
- @JUnit
- spring aop
- 마이바티스
- spring
- pointcut
- myBatis
- JdbcTemplate
- java spring
- @test
- spring framework
- STS
- @AspectJ
- Today
- Total
개키우는개발자 : )
[오라클] 데이터베이스 객체의 종류-제약조건 본문
제약조건
제약조건(Constraints)은 컬럼에 대한 속성 형태로 정의하지만 엄연히 오라클 데이터베이스 객체 중 하나이며 데이터 무결성을 보장하기 위한 용도로 사용된다. 제약조건에는 NOT NULL, UNIQUE, 기본키, 외래키, CHECK 등이 있다.
1. NOT NULL
1 | 컬럼명 데이터타입 NOT NULL | cs |
테이블 생성,입력,조회
실습) NOT NULL 제약조건을 걸고 데이터값 NULL값 으로 입력하기
- 생성
1 2 3 4 | CREATE TABLE EX2_5( COL_NULL VARCHAR2(10), COL_NOT_NULL VARCHAR2(10) NOT NULL ); | cs |
- 입력
1 | INSERT INTO EX2_5 VALUES ('AA',''); | cs |
- 결과
1 | ORA-01400: NULL을 ("STUDY_USER"."EX2_5"."COL_NOT_NULL") 안에 삽입할 수 없습니다 | cs |
- 재입력
1 | INSERT INTO EX2_5 VALUES ('AA','BB'); | cs |
- 조회
1 2 | SELECT constraint_name, constraint_type,table_name,search_condition FROM user_constraints WHERE table_name = 'EX2_5'; | cs |
- 결과
ex2_5 테이블 제약조건 타입
사용자가 생성한 제약조건의 설정들을 확인 하기 위해 USER_CONSTRAINTS 시스템 뷰에서 확인할 수 있다.
2. UNIQUE
UNIQUE 제약조건은 말 그대로 해당 컬럼에 들어가는 값이 유일해야 한다는 의미다. 즉 중복 값을 허용하지 않는다.
1 2 3 | 컬럼명 데이터타입 UNIQUE 혹은 CONSTRAINTS 제약조건명 UNIQUE(컬럼명,...) | cs |
테이블 생성,입력,조회
실습) NOT NULL , UNIQUE 제약조건 기능 확인하기
- 생성
1 2 3 4 5 6 | CREATE TABLE EX2_6( COL_UNIQUE_NULL VARCHAR2(10) UNIQUE, COL_UNIQUE_NNULL VARCHAR2(10) UNIQUE NOT NULL, COL_UNIQUE VARCHAR2(10), CONSTRAINTS unique_nm1 UNIQUE (COL_UNIQUE) ); | cs |
- 조회
1 2 3 | SELECT constraint_name, constraint_type, table_name, search_condition FROM user_constraints WHERE table_name = 'EX2_6'; | cs |
- 결과
ex2_6 테이블 제약조건 타입
CONSTRAINT_NAME 에 UNIQUE_NM1 이라는 제약조건명이 생성됐음을 확인할 수 있다.
- 입력
두번 연속으로 실행시켜보면 AA의 값이 두번 입력된다.
1 | INSERT INTO EX2_6 VALUES ('AA','AA','AA'); | cs |
- 결과
AA의 값이 중복으로 들어갈 수 없기때문에 무결성 오류가 발생한다.
1 2 | 오류 보고 - ORA-00001: 무결성 제약 조건(STUDY_USER.SYS_C0014534)에 위배됩니다 | cs |
- 입력
1 | INSERT INTO EX2_6 VALUES ('','BB','BB'); | cs |
- 입력
1 | INSERT INTO EX2_6 VALUES ('','CC','CC'); | cs |
분명 UNIQUE는 중복을 허용하지 않는데 왜 '' 의 NULL 값은 중복으로 값이 허용될까?
NULL은 값이 없음을 의미하기 때문에 비교대상에서 NULL은 제외된다.
3. 기본키
기본키(Primary key) 는 UNIQUE와 NOT NULL 속성을 동시에 가진 제약조건으로,
테이블 당 1개의 기본키만 생성할 수 있다.
1 2 3 | 컬럼명 데이터타입 PRIMARY KEY 혹은 CONSTRAINTS 제약조건명 PRIMARY KEY(컬럼명,...) | cs |
테이블 생성,입력,조회
실습) Primary key 제약조건의 기능 확인하기
- 생성
1 2 3 4 | CREATE TABLE EX2_7( COL1 VARCHAR2(10) PRIMARY KEY, COL2 VARCHAR2(10) ); | cs |
- 조회
1 2 3 | SELECT constraint_name, constraint_type, table_name, search_condition FROM user_constraints WHERE table_name = 'EX2_7'; | cs |
- 결과
ex2_7 테이블 제약조건 타입
- 입력
1 | INSERT INTO EX2_7 VALUES ('','AA'); | cs |
- 결과
NOT NULL 제약조건인 NULL값을 삽입할 수 없습니다 라는 오류가 발생한다.
1 2 | 오류 보고 - ORA-01400: NULL을 ("STUDY_USER"."EX2_7"."COL1") 안에 삽입할 수 없습니다 | cs |
- 입력
두번 연속 값을 입력합니다.
1 | INSERT INTO EX2_7 VALUES ('AA','AA'); | cs |
- 결과
UNIQUE 제약조건인 중복값을 삽입할 수 없습니다 라는 오류가 발생한다.
1 2 | 오류 보고 - ORA-00001: 무결성 제약 조건(STUDY_USER.SYS_C0014537)에 위배됩니다 | cs |
CONSTRAINTS 키워드를 사용하여 여러 컬럼을 하나의 기본키로 만들 수도 있다.
예) CONSTRAINT PK_JOB_HISTORY PRIMARY KEY (EMPLOYEE_ID,START_DATE) 형식
보통 테이블을 만들 때 특수한 경우를 제외하고 기본키는 반드시 생성하는 것이 원칙이다.
4. 외래키
외래키(Foreign key) 는 테이블 간의 참조 데이터 무결성을 위한 제약조건이다.
1 2 | CONSTRAINT 외래키명 FOREIGN KEY(칼럼명,...) REFERENCES 참조테이블(참조테이블 컬럼명,...) | cs |
외래케에 대한 제약사항은 다음과 같다.
- 반드시 참조하는 테이블 먼저 생성되어야 하며, 참조키가 참조 테이블의 기본키로 만들어져 있어야한다.
- 외래키에 사용할 수 있는 컬럼 개수는 최대 32개다.
- 여러 컬럼을 외래키로 만들려면, 참조하는 컬럼과 외래키 컬럼의 순서와 개수는 같아야 한다.
5. CHECK
CHECK는 컬럼에 입력되는 데이터를 체크해 특정 조건에 맞는 데이터만 입력 받고 그렇지 않으면 오류를 뱉어 낸다.
1 | CONSTRAINT 체크명 CHECK(체크조건) | cs |
테이블 생성,입력,조회
실습) CHECK 조건문 기능 확인
- 생성
1 2 3 4 | CREATE TABLE EX2_8( num1 NUMBER CONSTRAINT check1 CHECK (num1 BETWEEN 1 AND 9), gender VARCHAR(10) CONSTRAINT check2 CHECK (gender IN ('MALE','FEMALE')) ); | cs |
- 조회
1 2 3 | SELECT constraint_name, constraint_type, table_name, search_condition FROM user_constraints WHERE table_name = 'EX2_8'; | cs |
- 결과
ex2_8 테이블 제약조건 타입
- 입력
1 | INSERT INTO EX2_8 VALUES (10,'MALE'); | cs |
- 결과
1 2 | 오류 보고 - ORA-02290: 체크 제약조건(STUDY_USER.CHECK1)이 위배되었습니다 | cs |
- 입력
1 | INSERT INTO EX2_8 VALUES (5,'MALE'); | cs |
- 결과
1 | 1 행 이(가) 삽입되었습니다. | cs |
6. DEFAULT
DEFAULT 는 제약조건에는 포함되지 않지만 칼럼 속성 중 하나로 컬럼속에 DEFAULT 디폴트 값 형식으로 기술하면 자동으로 디폴트 값이 들어간다.
테이블 생성,입력,조회
실습) CHECK 조건문 기능 확인
- 생성
1 2 3 4 5 | CREATE TABLE EX2_9( COL1 VARCHAR(10) NOT NULL, COL2 VARCHAR(10) NULL, CREATE_DATE DATE DEFAULT SYSDATE ); | cs |
- 입력
두번째 입력에선 2개의 컬럼 값만 입력했다.
1 2 | INSERT INTO EX2_9 VALUES ('AA','BB',DEFAULT); INSERT INTO EX2_9(COL1,COL2) VALUES ('CC','BB'); | cs |
- 조회
1 | SELECT * FROM EX2_9; | cs |
- 결과
두번째 결과에서 SYSDATE 값이 입력된 것을 볼 수 있다.
DEFAULT 조회
'Oracle SQL Developer > 오라클SQL과 PL-SQL' 카테고리의 다른 글
[오라클] 테이블 삭제,변경,복사 (0) | 2019.02.19 |
---|---|
[오라클] 데이터베이스 객체의 종류-날짜 데이터 타입 (0) | 2019.02.17 |
[오라클] 데이터베이스 객체의 종류-숫자 데이터 타입 (2) | 2019.02.17 |
[오라클] 데이터베이스 객체의 종류-문자 데이터 타입 (0) | 2019.02.17 |
[오라클] 데이터베이스 객체의 종류-테이블 생성 (0) | 2019.02.17 |