Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- Java
- 메서드 오버로딩
- JAVA기초
- continue문
- 연관관계
- 인텔리제이 기초 설정
- JAVA객체지향
- 상수
- 메서드
- 반복문
- 포함관계
- 컴파일
- OPP개념
- While
- Java데이터 타입
- 인텔리제이 한글 깨짐 해결법
- break문
- 집합관계
- 시스템 환경 변수 편집
- IntelliJ IDEA
- multi-threading
- java변수
- 자바 멀티스레딩
- for문
- this예약어
- function
- Thread
- 생성자
- 접근제어지시자
- 형 변환
Archives
- Today
- Total
최원종의 개발 블로그
SQL - DDL, DML, DCL -5 본문
SQL의 세 가지 역할

DDL (Data Definition Language) - 구조를 만든다
도서관 설계자: 책장을 어디에 몇 개 놓을지 설계
→ CREATE, ALTER, DROP
DML (Data Manipulation Language) - 데이터를 다룬다
도서관 사서: 책을 추가하고, 찾아주고, 교체하고, 폐기
→ INSERT, SELECT, UPDATE, DELETE
DCL (Data Control Language) - 권한을 관리한다
도서관 관리자: 누가 어떤 책을 볼 수 있는지 결정
→ GRANT, REVOKE
DDL(Data Definition Language)
- 구조를 만드는 역
- 테이블이나 데이터베이스 자체를 만들고 수정하고 삭제
-- 데이터베이스 생성
CREATE DATABASE school;
USE school;
-- 테이블 생성
CREATE TABLE student (
student_id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
grade INT NOT NULL,
major VARCHAR(50) NOT NULL,
phone VARCHAR(20)
);
-- 테이블 구조 확인
DESC student;
-- 컬럼 추가
ALTER TABLE student ADD COLUMN email VARCHAR(100);
-- 컬럼 삭제
ALTER TABLE student DROP COLUMN email;
-- 테이블 삭제
DROP TABLE student;
-- 데이터베이스 삭제
DROP DATABASE school;
DML (Data Manipulation Language)
- 데이터를 다루는 역할
- 가장 많이 사용하는 SQL
-- school DB 와 student 테이블이 있다고 가정
-- 데이터 추가 (INSERT)
INSERT INTO student (student_id, name, grade, major, phone)
VALUES (1001, '김철수', 2, '컴퓨터공학', '010-1234-5678');
-- 여러 건 한 번에
INSERT INTO student (student_id, name, grade, major, phone) VALUES
(1002, '이영희', 3, '경영학', '010-2345-6789'),
(1003, '박민준', 1, '전자공학', '010-3456-7890');
-- 데이터 조회 (SELECT)
SELECT * FROM student;
SELECT name, major FROM student WHERE grade = 2;
-- 데이터 수정 (UPDATE)
-- WHERE 없으면 전체 행이 수정됩니다!
UPDATE student SET grade = 3 WHERE student_id = 1001;
-- 데이터 삭제 (DELETE)
-- WHERE 없으면 전체 행이 삭제됩니다!
DELETE FROM student WHERE student_id = 1003;
DCL(Data Control Language)
- 권한을 관리하는 역할
DCL 은 주로 DB 관리자(DBA)가 사용합니다.
개발자도 개념은 알아야 합니다.
-- 사용자 생성 (계정 관리 명령어 - DDL 에 가깝지만 DCL 과 함께 사용됨)
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password123';
-- 조회 권한 부여 (DCL)
GRANT SELECT ON school.student TO 'user1'@'localhost';
-- 권한 회수 (DCL)
REVOKE SELECT ON school.student FROM 'user1'@'localhost';
권한 관리 실습 코드
-- DCL(Data Control Language) - 권한을 관리한다
-- 사용자 생성 (사람, 시스템에게 줄 수 있다)
create user 'user1'@'localhost' identified by 'passowrd123';
-- localhost <--- 내 컴퓨터 안에서 접근하는 계정
-- 외부 IP 에서 접근하게 하려면 ?? 찾아서 완성 해야 함.
-- 조회 권한 부여
grant SELECT on school.student to 'user1'@'localhost';
-- 권한 회수
revoke select on school.student FROM 'user1'@'localhost';
-- 도전 문제
-- 외부 사용자가 사용할 계정을 생성하고 조회 권한만 주고 접속 확인(계정을 받은 사람)
-- IP 주소 확인
-- 풀이
-- 1. 로컬 접속 계정와 별개로 외부 접속용 계정 모두 만들어 줘야 한다. 필요없다면 로컬은 생성안해도 됨.
create user 'tenco'@'localhost' identified by 'asd1234!';
create user 'tenco'@'%' identified by 'asd1234!'; -- 모든 IP 허용
-- 2. 권한 부여 select, insert .. 추가 가능 하다. 모든 권한 부여 (ALL PRIVILEGES)
grant all privileges on school.* to 'tenco'@'localhost'; -- *.* RDBMS 안에 모든 db 모든 테이블
grant all privileges on school.* to 'tenco'@'%';
-- 권한 확인
show grants for 'tenco'@'localhost';
show grants for 'tenco'@'%';
-- 참고, 추가된 권한이 바로 적용 안될 수 도 있음
flush privileges; -- 바로 적용
-- 3. 권한 회수
revoke ALL privileges on school.* from 'tenco'@'localhost';
revoke ALL privileges on school.* from 'tenco'@'%';
UPDATE / DELETE 안전 습관
실무에서 가장 많이 발생하는 실수:
WHERE 없이 UPDATE 또는 DELETE 실행
나쁜 예:
UPDATE student SET grade = 0; -- 전체 학생 학년이 0 이 됨
DELETE FROM student; -- 전체 학생 데이터 삭제
좋은 습관:
UPDATE / DELETE 전에 항상 SELECT 로 먼저 확인
-- 1. 먼저 확인
SELECT * FROM student WHERE student_id = 1001;
-- 2. 확인 후 수정
UPDATE student SET grade = 3 WHERE student_id = 1001;
핵심 요약
DDL : CREATE(생성), ALTER(변경), DROP(삭제) → 구조 담당
DML : INSERT, SELECT, UPDATE, DELETE → 데이터 담당
DCL : GRANT, REVOKE → 권한 담당
UPDATE / DELETE 에서 WHERE 필수
없으면 전체 행이 영향받음
실행 전 SELECT 로 대상 먼저 확인'MySQL' 카테고리의 다른 글
| INSERT 구문과 제약 조건 -7 (0) | 2026.04.02 |
|---|---|
| MySQL 데이터 타입 - 6 (0) | 2026.04.02 |
| 데이터베이스 설계 시나리오 (0) | 2026.04.02 |
| 데이터베이스란? (0) | 2026.04.02 |
| 데이터와 정보 (0) | 2026.04.01 |