본문으로 바로가기

[Oracle] 데이터 무결성 -1-

category DB/Oracle 2021. 5. 7. 15:03

2015. 7. 14. 14:58 Naver Blog 백업용


테이블을 생성하는 CREATE TABLE

 

- CREATE TABLE TABLE_NAME

- CREATE TABLE NEWEMP(

EMPNO NUMBER(4),

ENAME VARCHAR(10),

SAL NUMBER(7,20));

- 서브쿼리로 테이블 생성하기: 기존의 TABLE과 동일한 테이블(구조,데이터) 생성

CREATE TABLE TEMPTABLE 

AS

SELECT * FROM EMP WHERE 1=0;

 

단, 구조만 복사하는 것은 WHERE 1=0의 조건을 넣어줌

 

테이블 구조를 변경하는 ALTER TABLE

 

- ALTER TABLE TEMPTABLE ADD(JOB VARCHAR2(9)); --> 새로운 컬럼을 추가

- ALTER TABLE TEMPTABLE MODIFY(JOB VARCHAR2(30)); --> 컬럼의 구조를 변경

- ALTER TABLE TEMPTABLE DROP COLUMN JOB; --> 컬럼을 삭제

BUT, 컬럼을 삭제하는 일은 위험하기 때문에 SET UNUSED(JOB)과 같이 논리적으로 

 제한하는 방법을 사용함

 

임시테이블 생성

 

CREATE TABLE NEWEMP(

ID VARCHAR2(20),

NAME VARCHAR2(20),

ADDR VARCHAR2(20),

POINT NUMBER(20),

EMAIL VARCHAR2(20));

 

ALTER TABLE NEWEMP ADD GENDER VARCHAR2(20);

 

 

CHAPTER 13)

데이터 무결성을 위한 제약 조건

 

- 제약조건의 이름은 헷갈릴 수 있으므로 [TABLE명_컬럼명_제약조건명] 으로 설정한다.

 

필수 입력을 위한 NOT NULL 제약조건

 

- NOT NULL 제약조건 수정은 MODIFY로 밖에 안됨

- 예시

 

ALTER TABLE NEWEMP MODIFY ADDR CONSTRAINT NEWEMP_ADDR_NN NOT NULL;

INSERT INTO NEWEMP(ID,NAME,ADDR) VALUES('LEE','이민호',NULL);

INSERT INTO NEWEMP(ID,NAME,ADDR) VALUES('LEE','이민호',NULL)

                                                          *

ERROR at line 1:

 

ORA-01400: cannot insert NULL into ("JAVA"."NEWEMP"."ADDR")

 

유일한 값만 허용하는 UNIQUE 제약조건 = 중복불가

 

 

+ 컬럼레벨 제약조건 / 테이블레벨 제약조건

 

- NOT NULL 제약조건은 컬럼레벨만 가능

 

- 테이블레벨 제약조건 예시

CREATE TABLE TEST( 

ID VARCHAR2(20),

NAME VARCHAR2(20),

PRIMARY KEY(ID)

UNIQUE(NAME));

 

INSERT INTO TEST VALUES('JANG', '장동건');

INSERT INTO TEST VALUES('JANG2', '장동건'); -> UNIQUE 제약조건에 걸림

 

+ 제약 조건 변경하기(P.402)

 

- ALTER TABLE TABLENAME ADD CONSTRAINT CONSTRAINT_NAME CONSTRAINT_TYPE(COL)

- 예시

ALTER TABLE NEWEMP ADD CONSTRAINT NEWEMP_EMAIL_U UNIQUE(EMAIL);

INSERT INTO NEWEMP(ID,NAME,EMAIL) VALUES('JANG2','장동건','ABC@ABC.CO.KR');

INSERT INTO NEWEMP(ID,NAME,EMAIL) VALUES('JANG3','장동건','ABC@ABC.CO.KR');

 

ERROR at line 1:

 

ORA-00001: unique constraint (JAVA.NEWEMP_EMAIL_U) violated

 

데이터 구분을 위한 PRIMARY KEY 제약조건

 

참조 무결성을 위한 FOREIGN KEY 제약조건

 

- CREATE TABLE MYDEPT(

DEPTNO VARCHAR2(10) PRIMARY KEY,

DNAME VARCHAR2(20));

 

- CREATE TABLE MYEMP(

EMPNO VARCHAR2(10) PRIMARY KEY,

ENAME VARCHAR2(20),

DEPTNO VARCHAR2(10));

 

ALTER TABLE MYEMP ADD CONSTRAINT MYEMP_DEPTNO_FK FOREIGN KEY(DEPTNO) REFERENCES MYDEPT(DEPTNO);

 

INSERT INTO MYEMP VALUES('1111','장동건','001');

INSERT INTO MYEMP VALUES('2222','김희주','002');

INSERT INTO MYEMP VALUES('3333','이민호','003');

 

INSERT INTO MYEMP VALUES('3333','이민호','003')

*

ERROR at line 1:

ORA-02291: integrity constraint (JAVA.MYEMP_DEPTNO_FK) violated - parent key not found

 

CHECK와 DEFAULT의 제약조건

 

- GENDER COLUMN에 남자,여자만 들어갈 수 있도록 제약

  ALTER TABLE TABLENAME 

  ADD CONSTRAINT TABLENAME_COL_CK CHECK(GENDER IN ('남자','여자'));  

- 예시

 

ALTER TABLE NEWEMP ADD CONSTRAINT NEWEMP_GENDER_CK CHECK(GENDER IN ('남자','여자'));

 

INSERT INTO NEWEMP(ID,NAME,GENDER) VALUES('KIM','김희주','여자');

INSERT INTO NEWEMP(ID,NAME,GENDER) VALUES('KIM','김희주','여자인가');

 

ERROR at line 1:

 

ORA-02290: check constraint (JAVA.NEWEMP_GENDER_CK) violated

 

 

'DB > Oracle' 카테고리의 다른 글

[Oracle] ORACLE 컴퓨터 이름이 한글일 때 트러블슈팅  (0) 2021.05.07
[Oracle] 뷰와 시퀀스 -1-  (0) 2021.05.07
[Oracle] 서브쿼리 -1-  (0) 2021.05.07
[Oracle] 조인(JOIN) -1-  (0) 2021.05.07
[Oracle] 검색(SELECT) -1-  (0) 2021.05.07