지지플랏의 DataScience

[SQL] DDL DML DCL 개념정리 mysql 예시 본문

Data Science/SQL

[SQL] DDL DML DCL 개념정리 mysql 예시

지지플랏 2023. 2. 13. 18:20

 

데이터 베이스를 조작할때 자주 나오는 단어가 DDL, DML 이다.Data Definition Language (DDL), Data Manipulatation Language(DML), Data Control Language(DCL)이다. 다양한 SQL 언어를 사용하다 보면 헷갈리니까 mysql 기준으로 한번 정리해보자.

1. Data Definition Language(DDL)

DDL 란 데이터베이스를 정의하는 언어이며 데이터가 들어오는 조건(제약조건), 데이터의 타입등을 정의하는 언어이다. 쉽게말하면 데이터를 수집하기 위한 껍데기 혹은 틀을 생성하는 것이며, Database 설계시 가장 먼저 수행한다. 다만, 사용하는 Tool(DBeaver 등)에 대해서 지원하는 파일(csv) 혹은 API 형식(Google Bigquery)에 따라 자동으로 데이터 type를 잡아주는 것들도 있다.

  • CREATE: 테이블을 만들기 위한 기본 statement로, 데이터 타입, 제약조건을 설정한다.
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

-- 사용예
create table 테이블명(
    컬럼명 데이터타입,
    컬럼명2 데이터타입 DEFAULT 값,
    컬럼명3 데이터타입 PRIMARY KEY,
    컬럼명3 데이터타입 AUTO_INCREMENT -- 자동인덱스 증가
FOREIGN KEY (컬럼명) REFERENCES 외부테이블(외부컬럼)
);
 
  • ALTER: 기존 테이블을 수정한다.
ALTER TABLE tbl_name
    [alter_option [, alter_option] ...]
    [partition_options]

-- 사용례

-- 제약조건 추가
ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건이름 UNIQUE (컬럼명);

-- 제약조건 추가2
ALTER TABLE 테이블명
ALTER 컬럼명 SET DEFAULT 초기값;

-- 제약조건 삭제
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름;
 
  • DROP: 모든 데이터와 정의도 삭제한다.
DROP [TEMPORARY] TABLE [IF EXISTS]
    tbl_name [, tbl_name] ...
    [RESTRICT | CASCADE]

-- 사용례
DROP TABLE 테이블명;
 
  • TRUNCATE 테이블안의 데이터를 삭제한다. DELETE를 all row에 대해서 수행하는 것과 유사하다.
TRUNCATE [TABLE] tbl_name

-- 사용례
TRUNCATE TABLE 테이블명;
 

 

자주 헷갈리는 TRUNCATE, DROP, DELETE 비교. 사실상 TRUNCATE와 DELETE를 비교해보면 쉽다.

 
 
TRUNCATE
DROP
DELETE
범주
DDL
DDL
DML
where와 사용가능
X
X
O
성능
빠름
(transaction log 1번)
-
느림
(각 행마다 transaction log 기록)
ROLLBACK
불가
불가
가능
테이블 용량
초기화
-
용량 감소 없음

2. Data Manipulatation Language(DML)

DML 란 기존에 생성된 Database를 조작하는 것으로 기본적으로 조회하는 select이 가장 많이 쓰인다.

  • SELECT
  • INSERT
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    { {VALUES | VALUE} (value_list) [, (value_list)] ... }

-- 사용례

-- 전체 컬럼에 해당하는 모든 값을 넣을 때
INSERT INTO 테이블이름
   VALUES (데이터값1, 데이터값2, 데이터값3, ...)

-- 특정 컬럼의 값을 넣을 때
INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...)
   VALUES (데이터값1, 데이터값2, 데이터값3, ...)
 
  • UPDATE
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET assignment_list
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

-- 사용례

UPDATE 테이블이름
SET 컬럼명1=데이터값1
WHERE 컬럼명2=데이터값
 
  • DELETE
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [[AS] tbl_alias]
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

-- 사용례 
DELETE FROM 테이블명 WHERE 조건;
 

 

3. Data Control Language(DCL)

DCL이란 데이터베이스의 권한 관리를 위한 명령어이다. 데이터베이스는 무결성과 정합성이 매우 중요하기 때문에, 데이터 변환,삭제 등에 대한 관리를 엄격하게 한다. 이를 위해서 특정 user의 수행권한을 관리하는 것이라고 이해하면 된다. mysql에서는 Account Manger Statements라고 분류된다.

  • GRANT
GRANT 'role1', 'role2' TO 'user1'@'localhost', 'user2'@'localhost';
 
  • REVOKE
REVOKE 'role1', 'role2' FROM 'user1'@'localhost', 'user2'@'localhost';
 

 

 

 

4. 출처

https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html

'Data Science > SQL' 카테고리의 다른 글

MySQL 서버 설치하기, DBeaver로 데이터 생성, 조회하기  (0) 2023.12.29
SQLD 요약자료  (0) 2023.10.29
SQLD 연습문제 (Oracle Live SQL)  (1) 2023.10.29