728x90
반응형
데이터 무결성(Data Intergrity)

 

  • 데이터의 정확성, 유효성, 일관성을 유지하고 보증
  • 데이터베이스나 RDBMS 시스템의 중요한 기능
  • 데이터의 잘못된 입력, 수정, 삭제로부터 보호
  • 입력한 데이터와 데이터베이스에 저장된 데이터 일치

- 데이터 무결성의 종류

유형 설명
개체 무결성
(Entity Intergrity)
- 기본키(Primary Key) 열은 고유
- Null 값을 가질 수 없음
참조 무결성
(Reference Intergrity)
- 외래키(Foreign)가 있는 테이블은 기본키와의 관계 유지
- 참조하는 외래키가 존재하면 기본키 변경이나 행 삭제 불가
영역 무결성
(Domain Intergrity)
- 데이터 형태, 범위, 기본값, 유일성에 대한 제한
- 주어진 속성 값은 정의된 도메인에 속한 값
비즈니스 무결성
(Business Intergrity)
- 사용자의 업무 특성과 규칙에 따른 제약 조건
- 제약조건, DEFAULT, TRIGGER 등의 사용자 정의

 


제약 조건 (Constraint)

 

  • 정해진 규칙에 적합한 데이터만 입력 가능하고, 그 외에는 거부하여 무결성 유지

 

- 제약 조건의 종류

유형 설명
기본 키 제약조건
(PRIMARY KEY)
- UNIQUE와 NOT NULL 조건 만족
- 테이블에서 각 행을 유일하게 식별하는 값
- 기본으로 NOT NULL, UNIQUE 제약이 포함
* 주키로 테이블당 1개만 생성이 가능하다.
* 반드시 테이블당 하나의 제약만을 정의할 수 있다.
외래 키 제약조건
(FOREIGN KEY)
- 외래 키가 참조 열의 값을 반드시 참조해야 함
- 참조되는 열은 UNIQUE하거나 기본키
* 외래키로 테이블당 여러 개 생성이 가능하다.
* 테이블 생성시 설정할 수 있다.
* 외래키 값은 참조 무결성 제약을 받을 수 있다.
* 외래키 값은 NULL 값을 가질 수 있다.
* 테이블간의 관계를 정의하기 위해 기본키(PK)를 다른 테이블의
외래키가 참조하도록 생성한다.
유일 키 제약조건
(UNIQUE)
- 중복된 값을 허용하지 않음
- 유일한 값으로 존재 (null 값 허용 가능)
* 테이블 내에서 중복되는 값이 없지만, NULL 입력이 가능하다.
NOT NULL 제약 조건
(NOT NULL)
- Null 값을 허용하지 않음
- 값을 반드시 입력해야 함
* 명시적으로 NULL 입력을 방지한다.
CHECK 제약 조건
(CHECK)
- 범위나 조건 등 지정된 값만 허용
- 개발자가 정의하는 제약 조건
* 데이터베이스에서 데이터 무결성을 유지하기 위하여
테이블의 특정컬럼에 설정하는 제약이다.

 


- 기본키 제약조건 위반(PRIMARY KEY)

INSERT INTO regions
VALUES (3, 'Asia');

--명령의 1 행에서 시작하는 중 오류 발생 -
--INSERT INTO regions
--VALUES (3, 'Asia')
--오류 보고 -
--ORA-00001: 무결성 제약 조건(HR.REG_ID_PK)에 위배됩니다
INSERT INTO countries
VALUES ('AR', 'Argentina', 2);

--명령의 1 행에서 시작하는 중 오류 발생 -
--INSERT INTO countries
--VALUES ('AR', 'Argentina', 2)
--오류 보고 -
--ORA-00001: 무결성 제약 조건(HR.COUNTRY_C_ID_PK)에 위배됩니다
INSERT INTO locations
VALUES (1000, 'Street', 12345, 'Korea', null, 'KR');

--명령의 1 행에서 시작하는 중 오류 발생 -
--INSERT INTO locations
--VALUES (1000, 'Street', 12345, 'Korea', null, 'KR')
--오류 보고 -
--ORA-00001: 무결성 제약 조건(HR.LOC_ID_PK)에 위배됩니다


- 외래키 제약조건 위반(FOREIGN KEY)

 

SELECT *
FROM countries;

INSERT INTO countries
VALUES ('KR', 'South Korea', 5);

--명령의 1 행에서 시작하는 중 오류 발생 -
--INSERT INTO countries
--VALUES ('KR', 'South Korea', 5)
--오류 보고 -
--ORA-02291: 무결성 제약조건(HR.COUNTR_REG_FK)이 위배되었습니다- 부모 키가 없습니다

* REGION_ID 가 1, 2, 3, 4 까지 밖에 없음.
참조할 수 없는 5 에 대해 INSERT를 시도하게 되어 오류 발생

 


- 유일키 제약조건 위반(UNIQUE)

 

SELECT *
FROM employees;

INSERT INTO employees
VALUES(207, 'Minkyu', 'Cheon', 'SKING', '515,123.4567', '21/01/01',
'IT_PROG', 10000, null, null, null);

--명령의 1 행에서 시작하는 중 오류 발생 -
--INSERT INTO employees
--VALUES(207, 'Minkyu', 'Cheon', 'SKING', '515,123.4567', '21/01/01',
--'IT_PROG', 10000, null, null, null)
--오류 보고 -
--ORA-00001: 무결성 제약 조건(HR.EMP_EMAIL_UK)에 위배됩니다

 


- NOT NULL 제약조건 위반(NOT NULL)

 

SELECT *
FROM locations;

INSERT INTO locations
VALUES (3300, 'Street', 12345, null , null, 'US');

--명령의 1 행에서 시작하는 중 오류 발생 -
--INSERT INTO locations
--VALUES (3300, 'Street', 12345, null , null, 'US')
--오류 보고 -
--ORA-01400: NULL을 ("HR"."LOCATIONS"."CITY") 안에 삽입할 수 없습니다

 


- CHECK 제약조건 위반(CHECK)

 

SELECT *
FROM employees;

INSERT INTO employees
VALUES (207, 'Minkyu', 'Cheon', 'JAKE', '123.123.1234', '21/01/01',
'IT_PROG', 0, null, null, null);

--명령의 1 행에서 시작하는 중 오류 발생 -
--INSERT INTO employees
--VALUES (207, 'Minkyu', 'Cheon', 'JAKE', '123.123.1234', '21/01/01',
--'IT_PROG', 0, null, null, null)
--오류 보고 -
--ORA-02290: 체크 제약조건(HR.EMP_SALARY_MIN)이 위배되었습니다

 

728x90
반응형

'Language > RDBMS' 카테고리의 다른 글

[DDL] 명령어를 활용한 테이블 정의  (0) 2023.03.04
트랜잭션 및 병행(동시성) 제어  (0) 2023.03.04
[DML-DELETE] 데이터 삭제  (0) 2023.03.03
[DML_UPDATE] 데이터 변경  (0) 2023.03.03
[DML_INSERT] 데이터 삽입  (0) 2023.03.03

+ Recent posts