DDL (Data Definition Language) - 데이터 정의어
- 데이터베이스 객체(테이블, 인덱스 등)를 정의하는 데 사용되는 언어.
- 주요 명령어: CREATE, ALTER, DROP
1. 테이블 생성 (CREATE TABLE)
- 테이블을 생성하는 명령어.
- 사용 형식:
SQL
CREATE TABLE 테이블명 (
컬럼명 데이터타입[(크기)] [NOT NULL] [DEFAULT 값] [제약조건],
[컬럼명 데이터타입[(크기)] [NOT NULL] [DEFAULT 값] [제약조건]],
...
[CONSTRAINT 기본키설정명 PRIMARY KEY (컬럼명[,컬럼명,...])],
[CONSTRAINT 외래키설정명 FOREIGN KEY (컬럼명) REFERENCES 테이블명(컬럼명) [ON DELETE 옵션]],
...
[CONSTRAINT 제약조건명 제약조건 (컬럼명)],
...
);
- 주요 옵션 설명:
- NOT NULL: 해당 컬럼에 NULL 값 입력 불가.
- DEFAULT 값: 데이터 입력 시 값이 없을 경우 기본값 설정. (예: DEFAULT 0, DEFAULT SYSDATE)
- CONSTRAINT 기본키설정명 PRIMARY KEY (컬럼명[,컬럼명,...]): 기본키 제약 조건 설정.
- CONSTRAINT 외래키설정명 FOREIGN KEY (컬럼명) REFERENCES 테이블명(컬럼명) [ON DELETE 옵션]: 외래키 제약 조건 설정.
- ON DELETE CASCADE: 부모 테이블의 행이 삭제될 때 자식 테이블의 관련 행도 함께 삭제.
- ON DELETE SET NULL: 부모 테이블의 행이 삭제될 때 자식 테이블의 외래키 값을 NULL로 설정.
- CONSTRAINT 제약조건명 UNIQUE (컬럼명): 컬럼의 값이 중복되지 않도록 제약.
- CONSTRAINT 제약조건명 CHECK (조건): 컬럼의 값이 특정 조건을 만족하도록 제약.
- 명명 규칙:
- 기본키설정명: PK_테이블명 형식 권장.
- 외래키설정명: FK_테이블명_부모테이블명 형식 권장.
- UNIQUE 제약조건: UQ_테이블명_컬럼명 형식 권장.
- CHECK 제약조건: CK_테이블명_컬럼명 형식 권장.
- 제공된 테이블 생성 예시:
SQL
CREATE TABLE PROFESSOR (
PRO_ID CHAR(5) PRIMARY KEY,
PRO_NAME VARCHAR2(30) NOT NULL,
PRO_ROOM_NUM VARCHAR2(210) UNIQUE,
PRO_TEL_NUM VARCHAR2(20) CHECK (PRO_TEL_NUM LIKE '010%'),
CONSTRAINT UQ_PROFESSOR_ROOM_NUM UNIQUE (PRO_ROOM_NUM),
CONSTRAINT CK_PROFESSOR_TEL_NUM CHECK (PRO_TEL_NUM LIKE '010%')
);
COMMENT ON TABLE PROFESSOR IS '교수 정보 테이블';
COMMENT ON COLUMN PROFESSOR.PRO_ID IS '교수 ID';
COMMENT ON COLUMN PROFESSOR.PRO_NAME IS '교수 이름';
COMMENT ON COLUMN PROFESSOR.PRO_ROOM_NUM IS '교수 연구실 번호';
COMMENT ON COLUMN PROFESSOR.PRO_TEL_NUM IS '교수 전화번호';
CREATE TABLE STUDENTS (
SID NUMBER(10) PRIMARY KEY,
STU_NAME VARCHAR2(30) NOT NULL,
DEPT_NAME VARCHAR2(50),
GRADE NUMBER(1),
ADDRESS VARCHAR2(200)
);
CREATE TABLE SUBJECTS (
SUB_CODE CHAR(4) PRIMARY KEY,
SUB_NAME VARCHAR2(30),
CREDIT NUMBER(1),
PRO_ID CHAR(5),
CONSTRAINT FK_SUBJECTS FOREIGN KEY (PRO_ID) REFERENCES PROFESSOR (PRO_ID) ON DELETE CASCADE
);
CREATE TABLE LECTURE_TIMETABLE (
LEC_TIMETABLE_CODE NUMBER(2) PRIMARY KEY,
START_TIME CHAR(4)
);
CREATE TABLE TAKING_SUBJECT (
SUB_CODE CHAR(4),
SID NUMBER(10),
COURSE_CREDIT NUMBER(3),
CONSTRAINT PK_TAKING_SUBJECT PRIMARY KEY (SUB_CODE, SID),
CONSTRAINT FK_TAKING_SUBJECT_SID FOREIGN KEY (SID) REFERENCES STUDENTS (SID) ON DELETE CASCADE,
CONSTRAINT FK_TAKING_SUBJECT_SUB_CODE FOREIGN KEY (SUB_CODE) REFERENCES SUBJECTS (SUB_CODE) ON DELETE CASCADE
);
CREATE TABLE LECTURE_INFO (
SUB_CODE CHAR(4),
LEC_TIMETABLE_CODE NUMBER(2),
LEC_ROOM_NUM VARCHAR2(10),
CONSTRAINT PK_LECTURE_INFO PRIMARY KEY (SUB_CODE, LEC_TIMETABLE_CODE),
CONSTRAINT FK_LECTURE_INFO_SUB_CODE FOREIGN KEY (SUB_CODE) REFERENCES SUBJECTS (SUB_CODE) ON DELETE CASCADE,
CONSTRAINT FK_LECTURE_INFO_LEC_TIMETABLE_CODE FOREIGN KEY (LEC_TIMETABLE_CODE) REFERENCES LECTURE_TIMETABLE (LEC_TIMETABLE_CODE) ON DELETE CASCADE
);
2. ALTER TABLE 문
- 테이블의 구조를 변경하는 데 사용되는 명령어.
- 테이블 이름 변경, 컬럼 추가, 수정, 삭제, 제약 조건 추가/삭제/활성화/비활성화 등의 기능을 제공.
2.1. 테이블 이름 변경 (RENAME TO)
- 사용 형식:
SQL
ALTER TABLE 원본테이블명 RENAME TO 변경테이블명;
- 예시:
SQL
ALTER TABLE LECTURE_TIMETABLE RENAME TO LEC_TIMETBL;
- 주의사항: 테이블 이름 변경 시, 해당 테이블을 참조하는 다른 객체(뷰, 프로시저 등)도 수정해야 한다.
2.2. 컬럼 추가 (ADD)
- 사용 형식:
SQL
ALTER TABLE 테이블명 ADD (컬럼명 데이터타입[(크기)] [NOT NULL] [DEFAULT 값]);
- 예시:
SQL
ALTER TABLE STUDENTS ADD (TEL_NUM VARCHAR2(20));
- 주의사항: NOT NULL 제약 조건을 추가할 경우, 기존 데이터가 NULL이 아니어야 한다.
2.3. 컬럼 수정 (MODIFY)
- 사용 형식:
SQL
ALTER TABLE 테이블명 MODIFY (컬럼명 데이터타입[(크기)] [NOT NULL] [DEFAULT 값]);
- 예시:
SQL
ALTER TABLE STUDENTS MODIFY (TEL_NUM NUMBER(15));
- 주의사항:
- 데이터 타입 변경 시 데이터 변환이 필요할 수 있다.
- 데이터 크기를 줄일 경우 데이터가 잘릴 수 있다.
- 제약 조건(예: NOT NULL, UNIQUE)을 고려해야 한다.
2.4. 컬럼 삭제 (DROP COLUMN)
- 사용 형식:
SQL
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
- 예시:
SQL
ALTER TABLE STUDENTS DROP COLUMN TEL_NUM;
- 주의사항: 컬럼 삭제 시 데이터가 완전히 삭제되므로 신중하게 사용해야 한다.
2.5. 컬럼 이름 변경 (RENAME COLUMN TO)
- 사용 형식:
SQL
ALTER TABLE 테이블명 RENAME COLUMN 원본컬럼명 TO 변경컬럼명;
- 예시:
SQL
ALTER TABLE LEC_TIMETBL RENAME COLUMN LECTURE_TIMETABLE_CODE TO LEC_TIME;
- 주의사항: 컬럼 이름 변경 시, 해당 컬럼을 참조하는 다른 객체(뷰, 프로시저 등)도 수정해야 한다.
2.6. 제약 조건 추가/삭제/활성화/비활성화
- 추가:
SQL
ALTER TABLE 테이블명 ADD CONSTRAINT 제약이름 제약조건;
- 삭제:
SQL
ALTER TABLE 테이블명 DROP CONSTRAINT 제약이름;
- 활성화/비활성화:
SQL
ALTER TABLE 테이블명 ENABLE|DISABLE 제약이름;
- 예시:
SQL
- 주의사항:
- 제약 조건 비활성화 시 데이터 무결성이 깨질 수 있다.
- 제약 조건 활성화 시 기존 데이터가 제약 조건을 만족해야 한다.
- 외래키 제약 조건 비활성화 시 참조 무결성이 깨질 수 있다.
-- STUDENTS 테이블의 기본키 삭제 (외래키 제약 조건 먼저 삭제 필요)
ALTER TABLE TAKING_SUBJECT DROP CONSTRAINT FK_STU_TAKE_SUB;
ALTER TABLE STUDENTS DROP CONSTRAINT PK_STUDENTS;
-- TAKING_SUBJECT 테이블에 외래키 추가
ALTER TABLE TAKING_SUBJECT ADD CONSTRAINT FK_STU_TAKE_SUB FOREIGN KEY (SID) REFERENCES STUDENTS (SID);
-- 외래키 제약 조건 비활성화
ALTER TABLE TAKING_SUBJECT DISABLE CONSTRAINT FK_STU_TAKE_SUB;
-- 데이터 무결성 확인 후 외래키 제약 조건 활성화
ALTER TABLE TAKING_SUBJECT ENABLE CONSTRAINT FK_STU_TAKE_SUB;
3.DROP TABLE 문
- 테이블을 삭제하는 명령어.
- 사용 형식:
SQL
DROP TABLE 테이블명;
- 예시:
SQL
- 주의사항:
- DROP TABLE 문은 테이블과 데이터를 완전히 삭제하므로 신중하게 사용해야 한다.
- 삭제된 테이블은 복구할 수 없다.
- 외래키 제약 조건이 있는 테이블을 삭제할 때, 자식 테이블의 외래키 제약 조건을 먼저 삭제해야 한다.
- CASCADE CONSTRAINTS 옵션을 사용하여 외래키 제약 조건을 함께 삭제할 수 있지만, 주의해야 한다.
DROP TABLE TEMP01;
DROP TABLE TEMP02;
-- ...
DROP TABLE TEMP11;
성능 고려 사항
- ALTER TABLE 문은 테이블의 구조를 변경하므로, 대용량 테이블의 경우 성능에 영향을 줄 수 있다.
- ALTER TABLE 문을 수행하는 동안 테이블에 대한 접근이 제한될 수 있다.
'개발 > SQL' 카테고리의 다른 글
Oracle 데이터 타입 - 이진데이터 (0) | 2025.02.21 |
---|---|
Oracle 데이터 타입 - 날짜 (0) | 2025.02.21 |
Oracle 데이터 타입 - 숫자 (0) | 2025.02.21 |
Oracle 데이터 타입 - 문자열 (0) | 2025.02.21 |
Oracle 11g XE scott계정 생성하기 (0) | 2025.02.21 |