Data Definiton Language의 약자
데이터베이스를 정의하는 언어를 말하며, 데이터베이스를 생성하거나 수정, 삭제 등
데이터의 전체 골격을 결정하는 언어를 말한다.
새로운 데이터베이스 객체(테이블, 인덱스 등)를 생성
기본키와 UNIQUE 가 설정된 속성에는 기본적으로 Unique Index가 생성된다.
/*
students 라는 이름의 테이블을 생성하고
컬럼으로 id, name, age를 사용한다.
id 는 정수형이며 기본키로 사용한다.
name은 가변 길이 문자형이다. (최대 50)
age는 정수형이다.
*/
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
-- 제약 조건이 정의된 테이블 생성
CREATE TABLE employees (
emp_id INT PRIMARY KEY, -- 기본키 설정
first_name VARCHAR(50) NOT NULL, -- NULL 허용안함
last_name VARCHAR(50) NOT NULL, -- NULL 허용안함
email VARCHAR(100) UNIQUE, -- UNIQUE(고유 값) 지정
hire_date DATE,
salary DECIMAL(10, 2) CHECK (salary > 0),
-- DECIMAL(10, 2) : 소수점 이하 두자리를 포함하여 10자리 숫자, 99999999.99까지 저장
-- CHECK (salary > 0) : 0보다 큰 양수
department_id INT,
CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES departments(department_id)
-- CONSTRAINT fk_department : 제약 조건 이름 지정
-- FOREIGN KEY (department_id) : 생성할 외래키 컬럼명
-- REFERENCES departments(department_id) : 참조할 테이블과 컬럼명
);
-- 학번에 인덱스 생성
CREATE UNIQUE Index st_idx ON student(sid)
-- 이름, 성별 속성으로 복합 인덱스를 생성
CREATE Index name_idx ON student(sname, gen);
-- student 테이블에서 deptno = 30 인 레코드들로 새로운 테이블 생성
CREATE TABLE DEPT30(id, name, gender, grade)
AS
SELECT sid, snamd, gen, grade
FROM student
WHERE deptno = 30;
기존 데이터베이스 객체를 수정
/*
students 테이블에 가변 길이 문자형 (최대 100) address 라는 컬럼을 추가한다.
*/
ALTER TABLE students ADD COLUMN address VARCHAR(100);
/*
students 테이블에서 address 라는 컬럼을 삭제한다.
*/
ALTER TABLE students DROP COLUMN address;
/*
students 테이블에서 age의 타입을 BIGINT 로 변경한다.
*/
ALTER TABLE students MODIFY COLUMN age BIGINT;
/*
students 테이블에서 name의 컬렴명을 full_name으로 변경한다.
*/
ALTER TABLE students RENAME COLUMN name TO full_name;
-- 1. PRIMARY KEY 제약 조건 추가
ALTER TABLE students ADD CONSTRAINT pk_students PRIMARY KEY (id);
-- 2. UNIQUE 제약 조건 추가
ALTER TABLE students ADD CONSTRAINT unique_email UNIQUE (email);
-- 3. FOREIGN KEY 제약 조건 추가
ALTER TABLE enrollments
ADD CONSTRAINT fk_student_id FOREIGN KEY (student_id) REFERENCES students(id);
-- 4. NOT NULL 제약 조건 추가
ALTER TABLE students MODIFY COLUMN email VARCHAR(100) NOT NULL;
-- 5. CHECK 제약 조건 추가
ALTER TABLE students ADD CONSTRAINT check_age CHECK (age >= 18);
데이터베이스 객체(자체) 혹은 인덱스를 삭제
DROP TABLE students;
데이터베이스의 데이터를 모두 삭제한다.
데이터베이스 자체는 삭제되지 않는다.
TRUNCATE TABLE students;