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)이 위배되었습니다