2013년 2월 11일 월요일

[DB] 테이블, 제약조건


CREATE TABLE 테이블이름(
 컬럼이름1 데이터타입,
 컬럼이름2 데이터타입,
 컬럼이름3 데이터타입,
 제약조건
);

데이터타입의 종류
- 문자형 : char(size), varchar2(size) <- 가변형
- 숫자형 : number, number(w), number(w, d)
- 날짜형 : date
- 대용량(이미지, 파일) : LOB

테이블 복사
CREATE TABLE emp01 AS SELECT * FROM employees;

테이블 구조만 복사
CREATE TABLE emp02 AS SELECT * FROM employees WHERE 1 = 0;

테이블 구조 수정
- 새로운 컬럼 추가
ALTER TABLE emp02 ADD(job varchar2(30));

- 기존 컬럼 수정
ALTER TABLE emp02 MODIFY(job varchar2(50));

- 기존 컬럼 삭제
ALTER TABLE emp02 DROP(job);
또는
ALTER TABLE emp02 DROP column job;

테이블 삭제
DROP TABLE emp02 PURGE;//쓰레기 데이터 값까지 제거

테이블 로우(row) 삭제
TRUNCATE table emp01;
DELETE FROM emp01;
두 명령어의 차이는 DELETE는 ROLLBACK이 가능해서 데이터를 되돌릴 수 있는 반면 TRUNCATE는 ROLLBACK이 불가능하다는 것

테이블 쓰레기값 삭제
PURGE recyclebin;

테이블 이름 변경
RENAME emp01 to emp02;

테이블 정의
CREATE TABLE emp03(
 empno number(4),
 empname varchar2(10),
 job varchar2(10),
 deptno number(4)
);

ROW 추가
INSERT INTO emp03 values(1, '홍길동', 'IT', 30);

ROW 추가시 명시적 컬럼 추가
INSERT INTO emp03(empno, empname, job) values(1, '박찬호', 'IT');

ROW 추가시 null문자로 추가
INSERT INTO emp03 values(1, null, null, null);

제약조건(데이터를 추가, 수정, 삭제하는 과정에서 DB의 무결성 유지)

CREATE TABLE emp04(
 empno number(4) NOT NULL, //반드시 입력해야하는 제약조건
 empname varchar2(10),
 job varchar2(10) PRIMARY KEY,//식별자로써 주키이다. 유일한 키값이고 반드시 입력
 deptno number(4) UNIQUE //중복되는 값을 배제(유일한 값)
);

테이블의 제약조건을 읽어냄
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME
 FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'EMP04';

CONSTRAINT_TYPE
P - PRIMARY KEY
R - FOREIGN KEY(REFERENCES)
U - UNIQUE
C - NOT NULL, CHECK

테이블 선언에서 주키와 외래키 설정하기
CREATE TABLE emp05(
 empno number(4),
 empname varchar2(10),
 job varchar2(10),
 department_id number(4)

 CONSTRAINT emp05_empno_PK PRIMARY KEY(empno),
 CONSTRAINT emp05_department_id_ FK FOREIGN KEY(department_id)
 REFERENCES departments(department_id)
);

테이블을 만든 뒤 나중에 제약을 설정

CREATE table emp06(//테이블 수정 방식
empno number(4),
empname varchar2(10),
job varchar2(10),
department_id number(4)
);

ALTER TABLE emp06 ADD CONSTRAINT emp06_empno_PK PRIMARY KEY(empno);
ALTER TABLE emp06 ADD CONSTRAINT emp06_department_id_FK FOREIGN KEY(department_id) REFERENCES departments(department_id);

제약조건 삭제
ALTER TABLE emp06 DROP CONSTRAINT emp06_empno_PK

CHECK (의도한 데이터만 입력받기 위해 설정)
CREATE TABLE emp07(
 empno number(4),
 empname varchar2(10),
 job varchar2(10),
 gender varchar2(1) CHECK(gender IN('M', 'F'))//M, F 둘중 하나의 값만 허용
);
INSERT INTO emp07 values(100, '홍길동', 'IT', 'M');

DEFAULT 제약조건
CREATE TABLE emp08(
 deptno number,
 dname varchar2(20),
 loc varchar2(20) DEFAULT 'seoul', //값을 입력하지 않으면 디폴트로 seoul입력
);
INSERT INTO emp08(deptno, dname) values(10, '홍길동');

댓글 없음:

댓글 쓰기