toggle menu

Oracle DDL 정리

2012. 7. 11. 15:53 Database/Oracle

DDL 문법에 대해 정리해보자.



특정 테이블의 제약 조건 목록을 확인하기 위해서는 아래와 같은 SQL 명령을 사용한다.
SQL> SELECT TABLE_NAME, CONSTRAINT_NAME 
FROM USER_CONSTRAINTS 
WHERE TABLE_NAME='EMP';

TABLE_NAME                     CONSTRAINT_NAME
------------------------------ ------------------------------
EMP                            PK_EMP
EMP                            FK_DEPTNO




테이블을 생성할 때 아래와 같이 SELECT를 사용해 다른 테이블의 내용을 가져와 생성할 수 있다. 해당 테이블의 틀만 가져오고 싶을 때는 WHERE 절의 조건을 거짓으로 처리하면 된다.

SQL> CREATE TABLE DEPT03 AS SELECT * 
FROM DEPT 
WHERE 1=0;

테이블이 생성되었습니다.





컬럼 추가 및 컬럼 속성 변경
SQL> alter table EMP03 ADD (JOB VARCHAR2(20) );

테이블이 변경되었습니다.

SQL> DESC EMP03
 이름                                                        널?      유형
 ----------------------------------------------------------- -------- ---------------
 EMPNO                                                                NUMBER(4)
 ENAME                                                                VARCHAR2(10)
 JOB                                                                  VARCHAR2(20)



SQL> alter table emp03 modify ( job varchar2(30) );

테이블이 변경되었습니다.

SQL> desc emp03
 이름                                                        널?      유형
 ----------------------------------------------------------- -------- ---------------
 EMPNO                                                                NUMBER(4)
 ENAME                                                                VARCHAR2(10)
 JOB                                                                  VARCHAR2(30)





컬럼 제거하기
SQL> desc emp03
 이름                                                        널?      유형
 ----------------------------------------------------------- -------- ---------------
 EMPNO                                                                NUMBER(4)
 ENAME                                                                VARCHAR2(10)
 JOB                                                                  VARCHAR2(30)

SQL> alter table emp03 drop column job;

테이블이 변경되었습니다.

SQL> desc emp03
 이름                                                        널?      유형
 ----------------------------------------------------------- -------- ---------------
 EMPNO                                                                NUMBER(4)
 ENAME                                                                VARCHAR2(10)




테이블 삭제
SQL> truncate table emp02;

테이블이 잘렸습니다.

SQL> select * from emp02;

선택된 레코드가 없습니다.




기본값 설정
SQL> alter table 학생 add GRADE CHAR(2) DEFAULT 'F';

테이블이 변경되었습니다.

SQL> SELECT * FROM 학생;

      학번 이름             학년 학과            나 GR
---------- ---------- ---------- --------------- -- --
       100 나수영              4 컴퓨터             F
       200 이찬수              3 컴퓨터             F
       300 정기태              1 컴퓨터             F
       400 송병길              4 경영               F
       500 박종화              2 컴퓨터             F
       600 안재하              1 전자공학           F

6 개의 행이 선택되었습니다.




SQL> ALTER TABLE 학생 ADD CONSTRAINT 학생_PK PRIMARY KEY(학번);

테이블이 변경되었습니다.

SQL> ALTER TABLE 과목 ADD CONSTRAINT 과목_PK PRIMARY KEY(과목번호);

테이블이 변경되었습니다.

SQL> ALTER TABLE 등록 ADD CONSTRAINT 등록_PK PRIMARY KEY(학번,과목번호);

테이블이 변경되었습니다.





SQL> SELECT TABLE_NAME, CONSTRAINT_NAME 
FROM USER_CONSTRAINTS 
WHERE TABLE_NAME='학생';

TABLE_NAME                     CONSTRAINT_NAME
------------------------------ ------------------------------
학생                           SYS_C009399
학생                           학생_PK

SQL> SELECT TABLE_NAME, CONSTRAINT_NAME 
FROM USER_CONSTRAINTS 
WHERE TABLE_NAME='과목';

TABLE_NAME                     CONSTRAINT_NAME
------------------------------ ------------------------------
과목                           SYS_C009400
과목                           SYS_C009401
과목                           과목_PK





SQL> ALTER TABLE 등록 ADD CONSTRAINT 등록_FK1 FOREIGN KEY(학번) REFERENCES 학생;

테이블이 변경되었습니다.


SQL> ALTER TABLE 등록 ADD CONSTRAINT 등록_FK2 FOREIGN KEY(과목번호) REFERENCES 과목;

테이블이 변경되었습니다.





SQL> SELECT TABLE_NAME, CONSTRAINT_NAME 
FROM USER_CONSTRAINTS 
WHERE TABLE_NAME IN ('등록', '학생', '과목');

TABLE_NAME                     CONSTRAINT_NAME
------------------------------ ------------------------------
과목                           과목_PK
등록                           등록_PK
등록                           등록_FK1
등록                           등록_FK2
학생                           학생_PK









SQL> ALTER TABLE 학생 ADD CONSTRAINT 나이_CH CHECK ( 나이 >= 18 );

테이블이 변경되었습니다.





SQL> ALTER TABLE 과목 ADD CONSTRAINT 학점_CH CHECK ( 학점 IN (1,2,3) );

테이블이 변경되었습니다.

SQL> ALTER TABLE 등록 ADD CONSTRAINT 성적_CH CHECK ( 성적 IN ('A', 'B', 'C', 'D', 'F') );

테이블이 변경되었습니다.



SQL> UPDATE 등록 SET 성적='E' WHERE 학번=100;
UPDATE 등록 SET 성적='E' WHERE 학번=100
*
1행에 오류:
ORA-02290: 체크 제약조건(SCOTT.성적_CH)이 위배되었습니다


Database/Oracle 관련 포스팅 더보기