
📌 DDL(Data Definition Language)
- 데이터 구조를 정의하거나 조작하는 데 사용
- 데이터베이스, 테이블, 인덱스 등을 생성, 수정 또는 삭제할 때 사용
- 주요 명령어: CREATE, ALTER, DROP, TRUNCATE 등
1-1. CREATE
--테이블 생성
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT,
department VARCHAR(100)
);
--INDEX 생성
CREATE INDEX idx_name ON employees (name);
--VIEW 생성
CREATE VIEW employee_view AS
SELECT id, name, department
FROM employees
WHERE age > 30;
1-2. ALTER
--테이블 수정 (칼럼 추가)
ALTER TABLE employees
ADD COLUMN salary DECIMAL(10, 2);
--제약조건 추가
ALTER TABLE employees
ADD CONSTRAINT pk_employee_id PRIMARY KEY (id);
1-3. DROP
--테이블 삭제
DROP TABLE employees;
--INDEX 삭제
DROP INDEX index_name;
--VIEW 삭제
DROP VIEW view_name;
--제약조건 삭제
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
📌 DML (Data Manipulation Language)
- 데이터를 검색, 삽입, 수정, 삭제하는 데 사용
- 주요 명령어: SELECT, INSERT, UPDATE, DELETE 등
2-1. SELECT
--데이터 모든 조회
SELECT * FROM employees;
--특정 열 선택
SELECT name, age FROM employees;
--조건으로 검색
SELECT * FROM employees WHERE department = 'IT';
--정렬 기준으로 검색
SELECT * FROM employees ORDER BY age DESC;
--그룹화 검색
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department;
2-2. INSERT
--데이터 추가
INSERT INTO employees (id, name, age, department, salary)
VALUES (1, 'John Doe', 30, 'IT', 50000);
2-3. UPDATE
--데이터 수정
UPDATE employees
SET salary = 55000
WHERE id = 1;
2-4. DELETE
--데이터 삭제
DELETE FROM employees
WHERE id = 1;
📌 DCL (Data Control Language)
- 특정 사용자나 사용자 그룹에 대한 특정 데이터베이스 객체에 대한 특정 권한을 부여
- 권한 부여는 데이터베이스 보안 및 접근 제어를 관리하는 데 중요
- 주요 명령어: GRANT, REVOKE 등
3-1.GRANT
--권한 부여
GRANT SELECT, INSERT, UPDATE ON employees TO user1;
3-2.REVOKE
--권한 박탈
REVOKE INSERT, UPDATE ON employees FROM user1;
📌 TCL (Transaction Control Language)
- 트랜잭션의 처리를 제어하는 데 사용
- 트랜잭션의 커밋 또는 롤백을 수행할 때 사용
- 주요 명령어: COMMIT, ROLLBACK, SAVEPOINT 등
COMMIT;
ROLLBACK;
--SAVEPOINT 사용
START TRANSACTION;
INSERT INTO employees (id, name, age, department)
VALUES (1, 'John Doe', 30, 'IT');
SAVEPOINT before_update;
UPDATE employees
SET age = 31
WHERE id = 1;
ROLLBACK TO SAVEPOINT before_update;
-- before_update 위치로 돌아가서 업데이트만 실행됨
COMMIT;