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