티스토리 뷰
데이터 무결성
데이터가 손상되거나 원래의 의미를 잃지 않고 유지되는 상태
*무결성 제약조건 : 입력되는 자료들의 규칙을 정해 줌
제약조건 | 설명 | 설정 레벨 |
NOT NULL | 해당 컬럼에 NULL을 입력할 수 없도록 | 컬럼 |
UNIQUE | 해당 컬럼 또는 컬럼 조합 값이 유일하도록 | 컬럼, 테이블 |
PRIMARY KEY | 각 행을 유일하게 식별할 수 있도록 | 컬럼, 테이블 |
FOREIGN KEY | 다른 테이블의 기본키를 참조 | 컬럼, 테이블 |
CHECK | 해당 컬럼에 특정 조건을 항상 만족시키도록 | 컬럼, 테이블 |
제약조건
이름으로 관리
- 문자로 시작, 길이는 30까지 가능
- 이름을 따로 지정하지 않으면 Oracle이 정한 이름으로 자동 생성(Oracle 환경에 따라 각각 다를 수 있음)
생성 시기
- 테이블 생성과 동시
- 테이블을 생성한 후
<NOT NULL>
ex) 1. 컬럼에 직접 입력
CREATE TABLE TABLE_NOTNULL01(
ID CHAR(3) NOT NULL,
NAME VARCHAR2(20)
);
INSERT INTO TABLE_NOTNULL01 VALUES(‘100’,’ORACLE’);
ex) 2. CONSTRAINT 에서 NOT NULL 제약조건을 설정하려 하면 ERROR 발생!!!
CREATE TABLE TABLE_NOTNULL02(
ID CHAR(3),
NAME VARCHAR2(20),
CONSTRAINT TN02_ID_NN NOT NULL(ID)
);
<UNIQUE>
ex) 1. 컬럼에 직접 입력
CREATE TABLE TABLE_UNIQUE01(
ID CHAR(3) UNIQUE,
NAME VARCHAR2(20)
);
INSERT INTO TABLE_UNIQUE01 VALUES(‘100’,’ORACLE’);
INSERT INTO TABLE_UNIQUE01 VALUES(‘100’,’JAVA’);
** 2번째 INSERT 에서 에러 : ID 는 UNIQUE KEY 이기 때문에 중복된 값을 넣을 수 없다
(ERROR 코드는 제약조건 이름을 명시하지 않았기 때문에 ORACLE이 정한 이름이 나온다.
-> 이건 각 ORACLE 상황에 따라 다를 수 있음
INSERT INTO TABLE_UNIQUE01 VALUES(NULL,’JAVA’); --NULL 가능!!
NULL 허용 = 아무것도 없거나, 다른 애들이랑 다르거나 둘중 하나를 허용한다!!
ex) 2. CONSTRAINT 로 제약조건 명시
CREATE TABLE TABLE_UNIQUE02(
ID CHAR(3),
NAME VARCHAR2(20),
NUM NUMBER,
CONSTRAINT TU02_ID_UN UNIQUE(ID,NAME) --SUPER KEY = 복합키
);
**슈퍼키(Super Key) : 복합키(Composite key) 또는 연결키 -> 2개 이상의 컬럼을 묶어 식별 가능하다면 key 로 쓴다.
이 경우 CONSTRAINT TU02_ID_UN UNIQUE(ID,NAME) -> ID, NAME 두개의 컬럼을 묶어 UNIQUE KEY 를 만들었다.
ID와 NAME 의 조합이 겹치는 TUPLE/ROW 가 나올 경우 ERROR 발생. (ERROR 이름은 우리가 정해준 'TU02_ID_UN')
CREATE TABLE TABLE_UNIQUE02(
ID CHAR(3),
NAME VARCHAR2(20),
NUM NUMBER,
CONSTRAINT TU02_ID_UN UNIQUE(ID),
CONSTRAINT TU02_NAME_UN UNIQUE(NAME)
);
**SUPER KEY 가 아니라 각각 UNIQUE 제약조건을 걸고 싶다면 이렇게 따로따로 두 줄을 써주면 된다.
INSERT INTO TABLE_UNIQUE02 VALUES(‘100’,’ORACLE’,1);
INSERT INTO TABLE_UNIQUE02 VALUES(‘100’,’JAVA’,2);
INSERT INTO TABLE_UNIQUE02 VALUES(‘100’,’JAVA’,3);
ERROR -> 3열의 INSERT문에서 100, JAVA 라는 컬럼값이 겹쳐서 UNIQUE 제약조건에 위배되므로 ERROR 발생!
(ERROR 코드는 우리가 정한 CONSTRAINT 이름인 'TU02_ID_UN'
<PRIMARY KEY = UNIQUE + NOT NULL>
ex) 1. 해당 컬럼에 직접 입력
CREATE TABLE TABLE_PK01(
ID CHAR(3) PRIMARY KEY,
NAME VARCHAR2(20)
);
INSERT INTO TABLE_PK01 VALUES(‘100’, ‘ORACLE‘);
INSERT INTO TALBE_PK01 VALUES(‘200’, ‘ORACLE’);
INSERT INTO TALBE_PK01 VALUES(NULL, ‘ORACLE’);
** 3 번째 INSERT 문에서 오류!! (PRIMARY KEY 로 지정된 컬럼에서는 NULL 을 넣을 수 없다!!)
ex) 2. CONSTRAINT 제약조건에 명시
CREATE TABLE TABLE_PK02(
ID CHAR(3),
NAME VARCHAR2(20),
NUM NUMBER,
CONSTRAINT TP02_PK PRIMARY KEY (ID,NAME)
);
ID와 NAME 을 조합해 PRIMARY KEY 를 만들었다. ( = 복합키 = SUPER KEY )
ID와 NAME 의 조합이 겹치는 TUPLE 이 있을 경우 ERROR
-> 둘 중 하나만 겹치는 경우에는 상관 없음!!
-> 둘 중 하나만 NULL 이어도 ERROR
<FOREIGN KEY>
다른 테이블의 기본키를 참조한다.
ex) 1. 컬럼에 직접 명시
CREATE TABLE TABLE_FK01(
ID CHAR(3) PRIMARY KEY,
NAME VARCHAR2(20),
PKID CHAR(3) REFERENCES TABLE_PK01(ID)
);
INSERT INTO TABLE_FK01 VALUES(‘123’,’ORACLE’,’100’);
INSERT INTO TABLE_FK01 VALUES(‘124’,’JAVA’,’200’);
INSERT INTO TABLE_FK01 VALUES(‘125’,’ORACLE’,’300’);
PARENT TABLE에 300 이라는 ID 가 없으면 오류!!!
ex) 2. CONSTRAINT 제약조건에 명시
CREATE TABLE TABLE_FK02(
ID CHAR(3) PRIMARY KEY,
NAME VARCHAR2(20),
PKID CHAR(3),
FOREIGN KEY(PKID) REFERENCES TABLE_PK01(ID)
);
INSERT INTO TABLE_FK02 VALUES(‘123’,’ORACLE’,’100’);
INSERT INTO TABLE_FK02 VALUES(‘124’,’JAVA’,’200’);
INSERT INTO TABLE_FK02 VALUES(‘125’,’ORACLE’,’300’);
PARENT TABLE에 300 이라는 ID 가 없으면 오류!!!
<CHECK>
해당 컬럼에 특정 조건을 항상 만족시키도록
ex) 1. 컬럼명에 직접 명시
CREATE TABLE TABLE_CHECK01(
EMP_ID CHAR(3) PRIMARY KEY,
NAME VARCHAR2(20),
MARRIAGE CHAR(1) CHECK(MARRIAGE IN(‘Y’,’N’))
);
INSERT INTO TABLE_CHECK01 VALUES(‘123’,’HONG’,’Y’);
INSERT INTO TABLE_CHECK01 VALUES(‘124’,’LEE’,’N’);
INSERT INTO TABLE_CHECK01 VALUES(‘125’,’KIM’,’A’);
3번째 컬럼인 MARRIAGE는 CHECK 제약조건에 따라 Y 혹은 N 이 나와야 한다.
-> A 입력은 ERROR
ex) 2. CONSTRAINT 제약조건에 명시
CREATE TABLE TABLE_CHECK02(
EMP_ID CHAR(3) PRIMARY KEY,
NAME VARCHAR2(20),
MARRIAGE CHAR(1),
CONSTRAINT TC_CK CHECK(MARRIAGE IN(‘Y’,’N’))
);
INSERT INTO TABLE_CHECK02 VALUES(‘123’,’HONG’,’Y’);
INSERT INTO TABLE_CHECK02 VALUES(‘124’,’LEE’,’N’);
INSERT INTO TABLE_CHECK02 VALUES(‘125’,’KIM’,’A’);
3번째 컬럼인 MARRIAGE는 CHECK 제약조건에 따라 Y 혹은 N 이 나와야 한다.
-> A 입력은 ERROR
'DB > Oracle' 카테고리의 다른 글
SLQ 활용 2. 단일 행 함수 (0) | 2019.11.29 |
---|---|
SQL 활용 1. 중첩 함수 (0) | 2019.11.29 |
SQL 기초 3. DCL (Data Control Language) 데이터 제어 언어 (0) | 2019.11.29 |
SQL 기초 2. DDL (Data Manipulation Language) 데이터 정의 언어 (0) | 2019.11.29 |
SQL 기초 1. DML (Data Manipulation Language) 데이터 조작 언어 (0) | 2019.11.28 |
- Total
- Today
- Yesterday
- select
- 상속
- ojdbc6.jar
- 객체
- Oracle
- .
- 추상화
- Scott/Tiger
- java 환경설정
- view
- 캡슐화
- 객체지향
- OOP
- Update
- controller
- JDBC 프로그램 작성단계
- 다형성
- jdbc
- INSERT
- java
- model
- Delete
- JdbcTemplate
- MVC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |