Search

[MySQL] 2. SQL λͺ…λ Ήμ–΄

νƒ€μž…
μŠ€ν„°λ””
νƒœκ·Έ
MySQL
μƒνƒœ
Published
생성일
2022/08/01 13:53
μ΅œμ’… νŽΈμ§‘ μΌμ‹œ
2023/02/27 04:10
μƒμœ„ ν•­λͺ©
1 more property

SQL κΈ°λ³Έ λͺ…λ Ήμ–΄

1.
데이터 μ •μ˜μ–΄(DDL) : ν…Œμ΄λΈ” 생성, λ³€κ²½, μ‚­μ œ
2.
데이터 μ‘°μž‘μ–΄(DML) : 데이터 μ‚½μž…, 쑰회, μˆ˜μ •, μ‚­μ œ β‡’ 제일 많이 μ“Έ λͺ…λ Ήμ–΄
3.
데이터 μ œμ–΄μ–΄(DCL) : 데이터 μ ‘κ·Ό κΆŒν•œ λΆ€μ—¬, 제거
4.
νŠΈλžœμ μ…˜ μ œμ–΄μ–΄(TCL) : 데이터 μ‘°μž‘μ–΄(DML) λͺ…λ Ήμ–΄ μ‹€ν–‰, μ·¨μ†Œ, μž„μ‹œμ €μž₯

데이터 μ •μ˜μ–΄(DDL; Data Definition Language)

CREATE : μŠ€ν‚€λ§ˆ, 도메인, ν…Œμ΄λΈ”, λ·°, 인덱슀 생성(μ •μ˜)
ALTER : ν…Œμ΄λΈ”μ— λŒ€ν•œ μ •μ˜λ₯Ό λ³€κ²½ν•˜λŠ” 데 μ‚¬μš©
DROP : μŠ€ν‚€λ§ˆ, 도메인, ν…Œμ΄λΈ”, λ·°, 인덱슀 μ‚­μ œ
1.
ν…Œμ΄λΈ” 생성(CREATE)
2.
μ—΄ μΆ”κ°€(ALTER)
3.
μ—΄ 데이터 νƒ€μž… λ³€κ²½(ALTER)
4.
ν…Œμ΄λΈ” λͺ… λ³€κ²½(ALTER)
5.
ν…Œμ΄λΈ” μ‚­μ œ(DROP)
컬럼의 데이터 νƒ€μž…
컬럼의 μ œμ•½ 쑰건
/* Practice λ°μ΄ν„°λ² μ΄μŠ€ 생성 */ CREATE DATABASE Practice; /* Practice λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš© */ USE Practice; /* ν…Œμ΄λΈ” 생성 (Create) */ CREATE TABLE νšŒμ›ν…Œμ΄λΈ” ( νšŒμ›λ²ˆν˜Έ INT PRIMARY KEY, 이름 VARCHAR(20), κ°€μž…μΌμž DATE NOT NULL, μˆ˜μ‹ λ™μ˜ BIT ); /* ν…Œμ΄λΈ” μ—΄ μΆ”κ°€ */ ALTER TABLE νšŒμ›ν…Œμ΄λΈ” ADD 성별 VARCHAR(2); /* μ—΄ 데이터 νƒ€μž… λ³€κ²½ */ ALTER TABLE νšŒμ›ν…Œμ΄λΈ” MODIFY 성별 VARCHAR(20); /* μ—΄ 이름 λ³€κ²½ */ ALTER TABLE νšŒμ›ν…Œμ΄λΈ” CHANGE 성별 μ„± VARCHAR(2); /* ν…Œμ΄λΈ”λͺ… λ³€κ²½ */ ALTER TABLE νšŒμ›ν…Œμ΄λΈ” RENAME νšŒμ›μ •λ³΄; /* ν…Œμ΄λΈ” μ‚­μ œ */ DROP TABLE νšŒμ›μ •λ³΄;
SQL
볡사

데이터 μ‘°μž‘μ–΄(DML; Data Manipulation Language)

SELECT : ν…Œμ΄λΈ”μ—μ„œ 쑰건에 λ§žλŠ” 행을 κ²€μƒ‰ν•œλ‹€
INSERT: ν…Œμ΄λΈ”μ— μƒˆλ‘œμš΄ 행을 μ‚½μž…
DELETE : ν…Œμ΄λΈ”μ—μ„œ 쑰건에 λ§žλŠ” 행을 μ‚­μ œ
UPDATE : ν…Œμ΄λΈ”μ—μ„œ 쑰건에 λ§žλŠ” ν–‰μ˜ λ‚΄μš©μ„ λ³€κ²½
DELETE, UPDATE μ‹œ, WHERE μ‘°κ±΄μ ˆμ„ μ‚¬μš©ν•΄μ„œ μ›ν•˜λŠ” ν–‰λ§Œ μ‚­μ œ,λ³€κ²½ν•  수 μžˆλ‹€.
/* Practice λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš©*/ USE Practice; /***************ν…Œμ΄λΈ” 생성(Create)***************/ /* νšŒμ›ν…Œμ΄λΈ” 생성 */ CREATE TABLE νšŒμ›ν…Œμ΄λΈ” ( νšŒμ›λ²ˆν˜Έ INT PRIMARY KEY, 이름 VARCHAR(20), κ°€μž…μΌμž DATE NOT NULL, μˆ˜μ‹ λ™μ˜ BIT ); /***************데이터 μ‚½μž…*******************/ INSERT INTO νšŒμ›ν…Œμ΄λΈ” VALUES (1001, '홍길동', '2020-01-02', 1); INSERT INTO νšŒμ›ν…Œμ΄λΈ” VALUES (1002, 'μ΄μˆœμ‹ ', '2020-01-03', 0); INSERT INTO νšŒμ›ν…Œμ΄λΈ” VALUES (1003, 'μž₯μ˜μ‹€', '2020-01-04', 1); INSERT INTO νšŒμ›ν…Œμ΄λΈ” VALUES (1004, 'μœ κ΄€μˆœ', '2020-01-05', 0); /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /***************쑰건 μœ„λ°˜*******************/ /* PRIMARY KEY μ œμ•½ 쑰건 μœ„λ°˜ */ INSERT INTO νšŒμ›ν…Œμ΄λΈ” VALUES (1004, 'μž₯보고', '2020-01-06', 0); /* NOT NULL μ œμ•½ 쑰건 μœ„λ°˜ */ INSERT INTO νšŒμ›ν…Œμ΄λΈ” VALUES (1005, 'μž₯보고', NULL, 0); /* 데이터 νƒ€μž… 쑰건 μœ„λ°˜ */ INSERT INTO νšŒμ›ν…Œμ΄λΈ” VALUES (1005, 'μž₯보고', 1, 0); /***************데이터 쑰회***************/ /* λͺ¨λ“  μ—΄ 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /* νŠΉμ • μ—΄ 쑰회 */ SELECT νšŒμ›λ²ˆν˜Έ, 이름 FROM νšŒμ›ν…Œμ΄λΈ”; /* νŠΉμ • μ—΄ 이름 λ³€κ²½ν•˜μ—¬ 쑰회 (μ‘°νšŒν•  λ•Œλ§Œ 이름 열을 μ„±λͺ…μœΌλ‘œ λ³€κ²½ν•΄μ„œ 쑰회) */ SELECT νšŒμ›λ²ˆν˜Έ, 이름 AS μ„±λͺ… FROM νšŒμ›ν…Œμ΄λΈ”; /***************데이터 μˆ˜μ •*******************/ /* λͺ¨λ“  데이터 μˆ˜μ • */ UPDATE νšŒμ›ν…Œμ΄λΈ” SET μˆ˜μ‹ λ™μ˜ = 0; /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /* νŠΉμ • 쑰건 데이터 μˆ˜μ • */ UPDATE νšŒμ›ν…Œμ΄λΈ” SET μˆ˜μ‹ λ™μ˜ = 1 WHERE 이름 = '홍길동'; /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /***************데이터 μ‚­μ œ*******************/ /* νŠΉμ • 데이터 μ‚­μ œ */ DELETE FROM νšŒμ›ν…Œμ΄λΈ” WHERE 이름 = '홍길동'; /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /* λͺ¨λ“  데이터 μ‚­μ œ */ DELETE FROM νšŒμ›ν…Œμ΄λΈ”; /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”;
SQL
볡사

데이터 μ œμ–΄μ–΄(DCL; Data Control Language)

DBA(λ°μ΄ν„°λ² μ΄μŠ€ κ΄€λ¦¬μž)κ°€ DB 관리와 κΆŒν•œ 관리λ₯Ό λͺ©μ μœΌλ‘œ μ‚¬μš©
GRANT : DB의 μ‚¬μš©μžμ—κ²Œ νŠΉμ • μž‘μ—…μ— λŒ€ν•œ κΆŒν•œ λΆ€μ—¬
REVOKE : μ‚¬μš©μžμ—κ²Œ νŠΉμ • μž‘μ—…μ— λŒ€ν•œ κΆŒν•œ λ°•νƒˆ
/***************μ‚¬μš©μž 확인***************/ /* MYSQL λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš© */ USE MYSQL; /* μ‚¬μš©μž 확인 */ SELECT * FROM USER; /***************μ‚¬μš©μž μΆ”κ°€***************/ /* μ‚¬μš©μž 아이디 및 λΉ„λ°€λ²ˆν˜Έ 생성 */ CREATE USER 'TEST'@LOCALHOST IDENTIFIED BY 'PASSWORD'; /* μ‚¬μš©μž 확인 */ SELECT * FROM USER; /* μ‚¬μš©μž λΉ„λ°€λ²ˆν˜Έ λ³€κ²½ */ SET PASSWORD FOR 'TEST'@LOCALHOST = '1234'; /***************κΆŒν•œ λΆ€μ—¬ 및 제거***************/ /** κΆŒν•œ: CREATE, ALTER, DROP, INSERT, DELETE, UPDATE, SELECT λ“± **/ /* νŠΉμ • κΆŒν•œ λΆ€μ—¬ */ GRANT SELECT, DELETE ON PRACTICE.νšŒμ›ν…Œμ΄λΈ” TO 'TEST'@LOCALHOST; /* νŠΉμ • κΆŒν•œ 제거 */ REVOKE DELETE ON PRACTICE.νšŒμ›ν…Œμ΄λΈ” FROM 'TEST'@LOCALHOST; /* λͺ¨λ“  κΆŒν•œ λΆ€μ—¬ */ GRANT ALL ON Practice.νšŒμ›ν…Œμ΄λΈ” TO 'TEST'@LOCALHOST; /* λͺ¨λ“  κΆŒν•œ 제거 */ REVOKE ALL ON Practice.νšŒμ›ν…Œμ΄λΈ” FROM 'TEST'@LOCALHOST; /***************μ‚¬μš©μž μ‚­μ œ***************/ /* μ‚¬μš©μž μ‚­μ œ */ DROP USER 'TEST'@LOCALHOST; /* μ‚¬μš©μž 확인 */ SELECT * FROM USER;
SQL
볡사

νŠΈλžœμž­μ…˜ μ œμ–΄μ–΄(TCL; Transaction Control Language)

β€’
νŠΈλžœμž­μ…˜μ΄λž€?
BEGIN λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ λ§Œλ“  λΆ„ν• ν•  수 μ—†λŠ” SQL μž‘μ—… λ‹¨μœ„λ₯Ό νŠΈλžœμž­μ…˜ 이라고 ν•œλ‹€.
COMMIT : λͺ¨λ“  νŠΈλžœμž­μ…˜ μž‘μ—…μ„ μ΅œμ’… μ‹€ν–‰
ROLLBACK : λͺ¨λ“  νŠΈλžœμž­μ…˜ μž‘μ—…μ„ 되돌림(μ·¨μ†Œ)
SAVEPOINT : νŠΈλžœμž­μ…˜ ν•˜μœ„ μž‘μ—… λ‚΄μ—μ„œ ROLLBACK μ €μž₯점을 μ§€μ •ν•˜λŠ” λͺ…λ Ήμ–΄
νŠΈλžœμž­μ…˜ μž‘μ—…κ³Ό 일반 μž‘μ—… 차이점?
νŠΈλžœμž­μ…˜ COMMIT ν•˜λŠ” μ‹œμ μ— λͺ¨λ“  μž‘μ—…λ“€μ΄ ν•œκΊΌλ²ˆμ— μˆ˜ν–‰λ˜λŠ” 것이 μ•„λ‹ˆλΌ, 일반적인 λͺ…λ Ήμ–΄μ²˜λŸΌ λͺ…λ Ήμ–΄κ°€ μ‹€ν–‰λ˜λ©΄ μž‘μ—…μ΄ μˆ˜ν–‰λœλ‹€.
ν•˜μ§€λ§Œ ROLLBACK 을 ν•  수 μžˆλ‹€λŠ” μž₯점으둜 μ‚¬μš©ν•˜λŠ” 것 κ°™λ‹€.Β 
/* Practice λ°μ΄ν„°λ² μ΄μŠ€ μ‚¬μš©*/ USE Practice; /***************ν…Œμ΄λΈ” 생성(Create)***************/ /* (νšŒμ›ν…Œμ΄λΈ” μ‘΄μž¬ν•  μ‹œ, νšŒμ›ν…Œμ΄λΈ” μ‚­μ œ) */ DROP TABLE νšŒμ›ν…Œμ΄λΈ”; /* νšŒμ›ν…Œμ΄λΈ” 생성 */ CREATE TABLE νšŒμ›ν…Œμ΄λΈ” ( νšŒμ›λ²ˆν˜Έ INT PRIMARY KEY, 이름 VARCHAR(20), κ°€μž…μΌμž DATE NOT NULL, μˆ˜μ‹ λ™μ˜ BIT ); /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /***************BEGIN + μ·¨μ†Œ(ROLLBACK)*******************/ /* νŠΈλžœμ μ…˜ μ‹œμž‘ */ BEGIN; /* 데이터 μ‚½μž… */ INSERT INTO νšŒμ›ν…Œμ΄λΈ” VALUES (1001, '홍길동', '2020-01-02', 1); /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /* μ·¨μ†Œ */ ROLLBACK; /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /***************BEGIN + μ‹€ν–‰(COMMIT)*******************/ /* νŠΈλžœμ μ…˜ μ‹œμž‘ */ BEGIN; /* 데이터 μ‚½μž… */ INSERT INTO νšŒμ›ν…Œμ΄λΈ” VALUES (1005, 'μž₯보고', '2020-01-06', 1); /* μ‹€ν–‰ */ COMMIT; /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /***************μž„μ‹œ μ €μž₯(SAVEPOINT)*******************/ /* (νšŒμ›ν…Œμ΄λΈ”μ— 데이터 μ‘΄μž¬ν•  μ‹œ, 데이터 λͺ¨λ‘ μ‚­μ œ) */ DELETE FROM νšŒμ›ν…Œμ΄λΈ”; /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /* νŠΈλžœμ μ…˜ μ‹œμž‘ */ BEGIN; /* 데이터 μ‚½μž… */ INSERT INTO νšŒμ›ν…Œμ΄λΈ” VALUES (1005, 'μž₯보고', '2020-01-06', 1); /* SAVEPOINT 지정 */ SAVEPOINT S1; /* 1005 νšŒμ› 이름 μˆ˜μ • */ UPDATE νšŒμ›ν…Œμ΄λΈ” SET 이름 = 'μ΄μˆœμ‹ '; /* SAVEPOINT 지정 */ SAVEPOINT S2; /* 1005 νšŒμ› 데이터 μ‚­μ œ */ DELETE FROM νšŒμ›ν…Œμ΄λΈ”; /* SAVEPOINT 지정 */ SAVEPOINT S3; /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /* SAVEPOINT S2 μ €μž₯점으둜 ROLLBACK */ ROLLBACK TO S2; /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”; /* μ‹€ν–‰ */ COMMIT; /* νšŒμ›ν…Œμ΄λΈ” 쑰회 */ SELECT * FROM νšŒμ›ν…Œμ΄λΈ”;
SQL
볡사