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

2023. 2. 13. 18:20·Data Science/SQL
반응형

 

데이터 베이스를 조작할때 자주 나오는 단어가 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

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

반응형

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

[LeetCode] 570 Managers with at Least 5 Direct Reports  (0) 2025.05.28
[프로그래머스] 가격대 별 상품 개수 구하기  (0) 2025.05.28
MySQL 서버 설치하기, DBeaver로 데이터 생성, 조회하기  (0) 2023.12.29
SQLD 요약자료  (0) 2023.10.29
SQLD 연습문제 (Oracle Live SQL)  (1) 2023.10.29
'Data Science/SQL' 카테고리의 다른 글
  • [프로그래머스] 가격대 별 상품 개수 구하기
  • MySQL 서버 설치하기, DBeaver로 데이터 생성, 조회하기
  • SQLD 요약자료
  • SQLD 연습문제 (Oracle Live SQL)
지지플랏
지지플랏
DataScience 컨설팅을 업으로 하고있습니다.
  • 지지플랏
    지지플랏의 DataScience
    지지플랏
  • 전체
    오늘
    어제
    • 지지플랏
      • Data Science
        • SQL
        • Engineering
        • 데이터과학을 위한 통계
        • Khan Academy
        • 실무로 통하는 인과추론 with 파이썬
        • 데이터 중심 어플리케이션 설계(DDIA)
        • 컴퓨터 밑바닥의 비밀
        • 자동화
        • 인터뷰
      • 담벼락
        • 생각이 자란다
        • 컨텐츠 독후감
        • Career Development
        • ToastMasters
      • 기타- 비연재
        • 전공
  • 블로그 메뉴

    • Home
    • Admin
    • Write
  • 링크

    • Linkedin
    • Github
  • 공지사항

    • 지지플랏의 Data Science
  • 인기 글

  • 태그

    SQLD
    데이터
    F분포
    토스트마스터
    영어연설
    a/btest
    빅쿼리
    평창
    데이터분석
    제약
    취업
    공유경제
    영화
    PGTM
    분석
    연설
    인과추론
    풀러스
    Toastmaster
    대중연설
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
지지플랏
[SQL] DDL DML DCL 개념정리 mysql 예시
상단으로

티스토리툴바