DBMS Intergrity.sql 활용

으누·2024년 8월 30일
1
post-thumbnail

Intergrity.sql

데이터 무결성 제약 조건 ( Data Integrity Constraint Rule)

- 데이터베이스의 데이터가 정확하고 일관성 있게 유지될 수 있도록 사용되는 규칙입니다.

- 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 테이블 생성할 때,

각 컬럼에 대해서 정의합니다.

무결성 제약 조건

- NOT NULL

NULL 값을 허용하지 않습니다.

UNIQUE

중복된 값을 허용하지 않고, 항상 유일한 값을갖도록 합니다.

PRIMARY KEY

NULL 을 허용하지 않고, 중복된 값도 허용하지 않습니다.

FOREIGN KEY

다른 테이블의 기본키를 참조하여 테이블 간 관계를 성정합니다.

CHECK

입력되는 값이 특정 조건을 만족하는지 확인합니다.

DEFAULT

값이 명시되지 않았을때 사용할 기본값을 지정합니다.

-- NOT NULL 제약 조건을 사용하지 않는 테이블

DROP TABLE emp01;

계정 생성

CREATE TABLE emp01(
empno NUMBER(4),
ename VARCHAR2(10),
job VARCHAR2(9),
deptno NUMBER(2)
);
DESC emp01;

-- 데이터 추가

INSERT INTO emp01 VALUES (NULL, NULL, 'SALESMAN', 30);

추가 한 값을 확인한다

SELECT * FROM emp01;

-- NOT NULL 제약 조건을 사용하는 테이블

DROP TABLE emp02;

계정 생성한다

CREATE TABLE emp02(
empno NUMBER(4) NOT NULL,
ename VARCHAR2(10) NOT NULL,
job VARCHAR2(9),
deptno NUMBER(2)
);

생성확인

DESC emp02;

-- 데이터 추가

NULL 사용이 불가하기 때문에 오류가 생깁니다

INSERT INTO emp02 VALUES (NULL, NULL, 'SALESMAN', 30); - Error

UNIQUE

- 특정 컬럼에 대해서 중복된 데이터가 저장되지 않게 합니다

-- UNIQUE 제약 조건을 사용하는 테이블

DROP TABLE emp03;

테이블 생성

CREATE TABLE emp03(
empno NUMBER(4) UNIQUE,
ename VARCHAR2(10) NOT NULL,
job VARCHAR2(9),
deptno NUMBER(2)
);
DESC emp03;

-- 데이터 추가

INSERT INTO emp03 VALUES (1100, 'ORACLE', 'DB', 50);
SELECT * FROM emp03;

-- 동일한 사원번호가 들어가면 error

-- INSERT INTO emp03 VALUES (1100, 'MARIA', 'DB', 50);

-- UNIQUE 제약 조건 설정된 컬럼에 NULL 값을 사용할 수 있습니다

INSERT INTO emp03 VALUES (NULL, 'MARIA', 'DB', 50);
SELECT * FROM emp03;

PRIMARY KEY

- NOT NULL 과 UNIQUE 를 결합한 제약 조건입니다

-- PRIMARY KEY 제약 조건을 사용하는 테이블

DROP TABLE emp04;

테이블 생성하기

CREATE TABLE emp04(
empno NUMBER(4) PRIMARY KEY,
ename VARCHAR2(10) NOT NULL,
job VARCHAR2(9),
deptno NUMBER(2)
);
DESC emp04;

-- 데이터 추가

INSERT INTO emp04 VALUES (1100, 'ORACLE', 'DB', 50);

SELECT * FROM emp04;

-- 오류

INSERT INTO emp04 VALUES (1100, 'MARIA', 'DB', 50);
INSERT INTO emp04 VALUES (NULL, 'MARIA', 'DB', 50);

참조 무결성

- 테이블과 테이블의 관계를 유지하고 데이터의 일관성을 보장하는 규칙입니다

FOREIGN KEY

- 외래 키(FOREIGN KEY)는 한 테이블의 필드가 다른 테이블의 기본키(PRIMARY KEY)를 참조하는 키입니다

-- FOREIGN KEY 제약 조건을 사용하는 테이블

DROP TABLE emp05;

계정 생성

CREATE TABLE emp05(
empno NUMBER(4) PRIMARY KEY,
ename VARCHAR2(10) NOT NULL,
job VARCHAR2(9),
deptno NUMBER(2) REFERENCES dept(deptno)
);

DESC emp05;

-- 데이터 추가

INSERT INTO emp05 VALUES (1100, 'MARIA', 'DB', 40);
SELECT * FROM emp05;

오류 가 생깁니다.

INSERT INTO emp05 VALUES (1200, 'ORACLE', 'DB', 50);

CHECK

- 입력되는 값을 확인하여 설정된 값 이외의 값이 들어오면 명령이 수행되지 않습니다

- 조건으로 데이터의 값의 범위나 특정 패턴의 숫자나 문자 값을 설정할 수 있습니다

-- CHECK 제약 조건을 사용하는 테이블

DROP TABLE emp06;

계정 생성

CREATE TABLE emp06(
empno NUMBER(4) PRIMARY KEY,
ename VARCHAR2(10) NOT NULL,
sal NUMBER(7, 2) CHECK (sal BETWEEN 500 AND 10000),
gender VARCHAR2(1) CHECK (gender IN ('M', 'F'))
);

DESC emp06;

-- 데이터 추가

INSERT INTO emp06 VALUES (1100, 'JAVA', 300, 'F'); ERROR
INSERT INTO emp06 VALUES (1100, 'JAVA', 2000, 'F'); 행추가
SELECT * FROM emp06;

INSERT INTO emp06 VALUES (1200, 'SPRING', 5000, 'm'); ERROR
INSERT INTO emp06 VALUES (1200, 'SPRING', 5000, 'M'); 행추가
SELECT * FROM emp06;

DEFAULT

- 아무런 값이 입력되지 않으면, DEFAULT 설정한 값이 들어갑니다

-- DEFAULT 제약 조건을 사용하는 테이블

DROP TABLE dept01 PURGE;

계정 생성

CREATE TABLE dept01(
deptno NUMBER(2) PRIMARY KEY,
dname VARCHAR2(10) NOT NULL,
loc VARCHAR2(10) DEFAULT 'SEOUL'
);
DESC dept01;

-- 데이터 추가

INSERT INTO dept01 (deptno, dname) VALUES (50, 'DATABASE');
SELECT * FROM dept01;

제약 조건명을 작성할 때 조건 설정

- 제약 조건명을 설정할 때 제약 조건면을 지정할 수 있습니다

제약 조건명을 지정하지 않으면 자동으로 제약 조건명을 부여합니다

오라클이 부여하는 제약 조건명은 SYS_ 다음에 숫자를 나열합니다

-- 제약 조건명을 사용하는 테이블

DROP TABLE emp07;

계정 생성

CREATE TABLE emp07(
empno NUMBER(4) CONSTRAINT EMP07_PK_EMPNO PRIMARY KEY,
ename VARCHAR2(10) CONSTRAINT EMP07_NN_ENAME NOT NULL,
job VARCHAR2(9),
deptno NUMBER(2) CONSTRAINT EMP07_FK_DEPTNO REFERENCES dept(deptno)
);
DESC emp07;

-- 제약 조건 확인

SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN ('EMP07');

profile
코딩 일기장

0개의 댓글