[데이터베이스] DDL

Narcoker·2024년 5월 19일
0

데이터베이스

목록 보기
14/17
post-custom-banner

DDL

Data Definiton Language의 약자

데이터베이스를 정의하는 언어를 말하며, 데이터베이스를 생성하거나 수정, 삭제 등
데이터의 전체 골격을 결정하는 언어를 말한다.

CREATE

새로운 데이터베이스 객체(테이블, 인덱스 등)를 생성

기본키와 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;

ALTER

기존 데이터베이스 객체를 수정

컬럼 추가 - ADD

/*
students 테이블에 가변 길이 문자형 (최대 100) address 라는 컬럼을 추가한다. 
*/

ALTER TABLE students ADD COLUMN address VARCHAR(100);

컬럼 삭제 - DROP

/*
students 테이블에서 address 라는 컬럼을 삭제한다.
*/

ALTER TABLE students DROP COLUMN address;

컬럼 데이터 타입 변경- MODIFY

/*
students 테이블에서 age의 타입을 BIGINT 로 변경한다.
*/

ALTER TABLE students MODIFY COLUMN age BIGINT;

컬럼 이름 변경 - RENAME [컬럼명] TO [변경할 컬럼명]

/*
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

데이터베이스 객체(자체) 혹은 인덱스를 삭제

DROP TABLE students;

TRUNCATE

데이터베이스의 데이터를 모두 삭제한다.
데이터베이스 자체는 삭제되지 않는다.

TRUNCATE TABLE students;
profile
열정, 끈기, 집념의 Frontend Developer
post-custom-banner

0개의 댓글