[ ์ ์ฝ ์กฐ๊ฑด / Constraints ]
Constraint
- ์ ์ฝ ์กฐ๊ฑด์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ ํ์ ์ ์ฉ ๊ฐ๋ฅํ ๊ท์น
- ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ๋ฉด ํ ์ด๋ธ์ ํน์ ์ด์ ์ ์ฅ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ํ์ ๋ฐ ๋ฐ์ดํฐ์ ๋ํ ์ ํ ๊ฐ๋ฅ
01. NOT NULL
- ํด๋น ์ ์ฝ ์กฐ๊ฑด์ ์ด์ null ๊ฐ์ ์ ์ฅํ ์ ์์์ ๋ํ๋
- ํด๋น ์ด์ด NOT NULL๋ก ์ง์ ์ ๋ฐ์ดํฐ ํ์ ๋ฐ ๋ฐ์ดํฐ ๋ํ null ๊ฐ์ด ์ ์ฅ๋ ์ ์์
- ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด NOT NULL์ด ์ง์ ๋ ๊ฒฝ์ฐ ์ ํ ์ฝ์ ์ ๋ง๋ค ID, NAME ํ๋์๋ ๋ฐ๋์ ๊ฐ์ด ํ์ํจ


02. UNIQUE [์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด]
- ํ ์ด๋ธ์ ๊ฐ ํ์ ๊ณ ์ ํ๊ฒ ์๋ณํ๋๋ฐ ๋์์ ์ฃผ๋ ์ ์ฝ ์กฐ๊ฑด
- ํ ๊ฐ์ ํ ์ด๋ธ์ ๋ ๊ฐ ์ด์์ ์ ๋ํฌ ์ด ์กด์ฌ ๊ฐ๋ฅ
- ์ฆ ์ ๋ํฌ ์ ์ฝ ์กฐ๊ฑด์ด ์ง์ ๋ ๊ฒฝ์ฐ ํด๋น ์ด์ ๊ฐ์ ์ค๋ณต ๋ ์ ์์


03. PRIMARY KEY / PK [๊ธฐ๋ณธ ํค]
- ํ๋ผ์ด๋จธ๋ฆฌ ํค(๊ธฐ๋ณธ ํค)๋ ํ ์ด๋ธ์ ๊ฐ ํ์ ๊ณ ์ ํ๊ฒ ์๋ณํ ์ ์๋ ํ๋
- ๊ธฐ๋ณธ ํค๋ ์ ์ผํ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ค๋ณต / ๊ณต๋ฐฑ ๋ถ๊ฐ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ณ์ด ๊ฐ๋ฅํ ๊ธฐ๋ณธํค๋ฅผ ์๋ฏธ


04. FOREIGN KEY / FK [์ธ๋ถ ํค]
- ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๊ฐ ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ ๊ฐ์ ์ ์ฉ
- ์ธ๋ถ ํค ํ๋๋ ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ํ ์ด๋ธ๋ค ์ฌ์ด์ ์ผ์ข ์ ๋งํฌ ์์ฑ ์ญํ ์ ํจ
- ์ธ๋ถ ํค๊ฐ ์๋ ํ ์ด๋ธ์ ํ์ ํ ์ด๋ธ์ด๋ผ ํ๋ฉฐ, ๊ธฐ๋ณธ ํค๊ฐ ์๋ ํ ์ด๋ธ์ ์ฐธ์กฐ ํ ์ด๋ธ ๋๋ ์์ ํ ์ด๋ธ์ด๋ผ ํจ

05. CHECK [๊ฒ์ฌ ์ ์ฝ์กฐ๊ฑด]
- ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋๋ก ์ด์ ๊ฐ์ ๊ฒ์ฆํ ๋ ์ฌ์ฉ
- ์ด์ ๋ฐฐ์น๋ ์ ์๋ ๊ฐ ๋ฒ์๋ฅผ ์ ํํ๋๋ฐ ์ฌ์ฉ
- CHECK ์ ์ฝ ์กฐ๊ฑด์ ์ผ๋ฐ์ ์ผ๋ก SQL์ CREATE TABLE ๋ช ๋ น๊ณผ ํจ๊ป ์ฌ์ฉ


06. DEFAULT [๊ธฐ๋ณธ๊ฐ ์ ์ฝ์กฐ๊ฑด]
- ํด๋น ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉ์๊ฐ ๊ฐ์ ์ง์ ํ์ง ์์ ๋ ์ด์ ๊ธฐ๋ณธ๊ฐ์ ์ง์
- ํน์ ๊ฐ์ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ๋ชจ๋ ์ ๋ ์ฝ๋์ ์๋ ์ถ๊ฐ


[ ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด / DML ]
Data Manipulation Language / DML
- ๋ฐ์ดํฐ ๊ฒ์, ๋ฑ๋ก, ์ญ์ , ๊ฐฑ์ ๋ฑ ๋ฐ์ดํฐ ์กฐ์์ ์ํด ์ฌ์ฉ๋๋ ๋ช ๋ น์ด
01. SELECT FROM [๋ฐ์ดํฐ ์กฐํ]
- ๋ฐ์ดํฐ ์กฐํ ์ ์ฌ์ฉ๋๋ ๋ช ๋ ์ด๋ก DQL(Data Query Language)๋ก ๋ถ๋ฅ๋๊ธฐ๋ ํจ
# Syntax
SELECT col_1, col_2 FROM table_name;
# col_1, col_2 : ํ
์ด๋ธ ๋ด ์กฐํํ ์ปฌ๋ผ
02. INSERT INTO [๋ฐ์ดํฐ ์ฝ์ ]
- ํ ์ด๋ธ ๋ด ๋ฐ์ดํฐ ์ฝ์ ์ ์ฌ์ฉ๋๋ ๋ช ๋ น๋ฌธ
# Syntax
INSERT INTO table_name(col_1, col_2, col_3)
VALUES(val_1, val_2, val_3, val_4);
03. UPDATE SET [๋ฐ์ดํฐ ๊ฐฑ์ ]
- ๊ธฐ์กด ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ ๋ ์ฌ์ฉ
- ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋จ์ผ ์ปฌ๋ผ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ ์ปฌ๋ผ ๊ฐฑ์ ๊ฐ๋ฅ
# Syntax
# col_2 ์ ๊ฐ์ด val_2์ธ ๋ฐ์ดํฐ์ col_1 ๊ฐ์ val_1์ผ๋ก ๊ฐฑ์
UPDATE table_name
SET col_1 = val_1
WHERE col_2 = val_2;
04. DELETE FROM [๋ฐ์ดํฐ ์ญ์ ]
- ํ ์ด๋ธ์์ ๊ธฐ์กด ๋ ์ฝ๋๋ฅผ ์ญ์ ํ ๋ ์ฌ์ฉ
- WHERE ์ ์์ ์ง์ ํ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋จ์ผ ๋ ์ฝ๋ ๋๋ ์ฌ๋ฌ ๋ ์ฝ๋ ์ญ์ ๊ฐ๋ฅ
# Syntax
DELETE FROM table_name
WHERE ์กฐ๊ฑด;
[ ๋ฐ์ดํฐ ์ ์ ์ธ์ด / DDL ]
Data Definition Language / DDL
- ํ ์ด๋ธ, ์ธ๋ฑ์ค, ๋ทฐ ๋ฑ๊ณผ ๊ฐ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ฅผ ์ ์
- ํ ์ด๋ธ์ ์์ฑ ์์ฑ, ๋ณ๊ฒฝ ๋ฐ ์ญ์ ๋ฑ ํ ์ด๋ธ ์์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ช ๋ น์ด
01. CREATE TABLE [ํ ์ด๋ธ ์์ฑ]
- ํด๋น ๋ช ๋ น๋ฌธ์ SQL์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด ํ ์ด๋ธ์ ์์ฑํ ๋ ์ฌ์ฉ


02. DROP TABLE [ํ ์ด๋ธ ์ญ์ ]
- DROP ๋ช ๋ น๋ฌธ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ํ ์ด๋ธ ์ญ์ ์ ์ฌ์ฉ

03. TRUNCATE TABLE [ํ ์ด๋ธ ๋ด ๋ชจ๋ ํ(๋ฐ์ดํฐ) ์ญ์ ]
- TRUNCATE ๋ช ๋ น๋ฌธ์ ํ ๋น ํด์ ๋ฅผ ์ํด ํ ์ด๋ธ์ ๋ฒ์๋ฅผ ํ์ํ๋๋ฐ ์ฌ์ฉ๋๋ DDL ์์ ์
- TRUNCATE ๋ช ๋ น์ ๊ฒฝ์ฐ ํ ์ด๋ธ ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ์ง๋ง ํ ์ด๋ธ ์์ฒด๋ ์ญ์ ํ์ง ์์
- ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ํ๋๋ฉฐ DROP ๋ช ๋ น์ด์ ๋ฌ๋ฆฌ ํ ์ด๋ธ ๋ด ๋ฐ์ดํฐ๋ ์ ๋ถ ์ฌ๋ผ์ง์ง๋ง
ํ ์ด๋ธ์ ๊ตฌ์กฐ๋ ๋จ์ ์์.


04. ALTER TABLE [ํ ์ด๋ธ ์์ ]
- ALTER TABLE ๋ช ๋ น๋ฌธ์ ๊ธฐ์กด ํ ์ด๋ธ์ ์์ , ๋ค์ํ ์ ์ฝ ์กฐ๊ฑด ์ถ๊ฐ ํน์ ์ญ์ ํ๋๋ฐ ์ฌ์ฉ
a. ADD [์ด ์ถ๊ฐ]
- ๊ธฐ์กด ํ ์ด๋ธ์ ์ด์ ์ถ๊ฐํ ๋ ์ฌ์ฉ
- ํ ์ด๋ธ์ ์ด ์ถ๊ฐ ์ ๋ฐ์ดํฐ ํ์ ์ ์ ํ์
# Syntax
ALTER TABLE <table_name>
ADD (Columnname_1 datatype,
Columnname_2 datatype,
...
Columnname_n datatype );
b. DROP [์ด ์ญ์ ]
- DROP COLUMN ๋ช ๋ น๋ฌธ์ ํ ์ด๋ธ ๋ด ์ด์ ์ญ์ ํ๋๋ฐ ์ฌ์ฉ
# Syntax
ALTER TABLE table_name
DROP COLUMN column_name;
c. MODIFY [์ด ์์ฑ ๋ณ๊ฒฝ]
- ํ ์ด๋ธ ๋ด ์กด์ฌํ๋ ๊ธฐ์กด ์ด์ ๋ฐ์ดํฐ ํ์ ์ ์์ ํ๋๋ฐ ์ฌ์ฉ๋๋ฉฐ ์ฌ๋ฌ ์ด์ ๋์์ ์์ ๊ฐ๋ฅ
- ๊ตฌ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ๋ผ ์ฝ๊ฐ์ฉ ๋ค๋ฅผ ์ ์์
# Syntax
ALTER TABLE table_name
MODIFY column_name column_type;
d. CHANGE [์ด ์ด๋ฆ ์์ ]
- ํ ์ด๋ธ ๋ด ์กด์ฌํ๋ ๊ธฐ์กด ์ด(์ปฌ๋ผ)์ ์ด๋ฆ์ ์์ ํ๋ ๋ช ๋ น๋ฌธ
- ๋ช ๋ น์ ํตํด ์ปฌ๋ผ๋ช ์์ ์ ๋จ์ํ๊ฒ ์ปฌ๋ผ๋ช ๋ง ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋ ์ปฌ๋ผ์
์๋ก ๋ฎ์ด ์ฐ๋ ๊ฐ๋ ์ด๊ธฐ์ ์ปฌ๋ผ ์ฌ์ ์๊ฐ ํ์ํจ
# Syntax
ALTER TABLE table_name
CHANGE table_name new_table_name VARCHAR(10);
e. RENAME [ํ ์ด๋ธ ๋ช ์์ ]
- ํด๋น ๋ช ๋ น๋ฌธ์ ํตํด ํ ์ด๋ธ ๋ช ์์ ๊ฐ๋ฅ
#Syntax
ALTER TABLE table_name # ๊ธฐ์กด table ๋ช
RENAME TO new_table_name; # ์์ ํ table ๋ช
[ ๋ฐ์ดํฐ ์ ์ด ์ธ์ด / DCL ]
Data Control Language (DCL)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ์ ๋ํ ์์ธ์ค๋ฅผ ์ ์ดํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ช ๋ น์ด
- ๋ฐ์ดํฐ ๊ฐ์ฒด๋ค์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๊ถํ์ ๋ถ์ฌ ๋ฐ ๋ฐํ
01. GRANT [๊ถํ ๋ถ์ฌ]
- MySQL์ CREATE USER ๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ณ์ ์ ๋ง๋ค ์ ์์ผ๋ ๊ณ์ ์ ๊ถํ ๋ถ์ฌ๋ ํ์ง ์์
- ์ฌ์ฉ์ ๊ณ์ ์ ๊ถํ์ ๋ถ์ฌํ ๋ GRANT ๋ช ๋ น๋ฌธ ์ฌ์ฉ
# Syntax
GRANT ๊ถํ๋ช
ON ๊ฐ์ฒด/ํ
์ด๋ธ TO ์ฌ์ฉ์๋ช
# 01.์ฌ์ฉ์๋ช
์ด Admin์ธ ์ฌ์ฉ์์๊ฒ 'Users'๋ผ๋ ํ
์ด๋ธ์ SELECT ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒฝ์ฐ
GRANT SELECT ON Users TO 'Admin'@'localhost;
# 02. ์ฌ์ฉ์์๊ฒ ๋ ์ด์์ ๊ถํ์ ๋ถ์ฌํ ๊ฒฝ์ฐ
GRANT SELECT, INSERT, DELETE ON Users TO 'Admin'@'localhost;
# 03. ์ฌ์ฉ์์๊ฒ ๋ชจ๋ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒฝ์ฐ
GRANT ALL ON Users TO 'Admin'@'localhost;
# 04. 'Users' ํ
์ด๋ธ์ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ํน์ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒฝ์ฐ
GRANT SELECT ON Users TO '*'@'localhost;
02. REVOKE [๊ถํ ๋ฐํ]
- REVOKE ๋ช ๋ น๋ฌธ์ ์ฌ์ฉ์์๊ฒ ๋ถ์ฌ๋ ๊ถํ์ ์ผ๋ถ ํน์ ์ ๋ถ๋ฅผ ๋ฐํํ๋๋ฐ ์ฌ์ฉ๋จ
- ๋ช ๋ น๋ฌธ ์ฌ์ฉ ํ์์ด GRANT๋ฌธ๊ณผ ๊ฑฐ์ ์ ์ฌํจ
# Syntax
REVOKE ๊ถํ๋ช
ON ๊ฐ์ฒด/ํ
์ด๋ธ FROM ์ฌ์ฉ์๋ช
# 01. ์ฌ์ฉ์๋ช
์ด 'Admin'์ธ ์ฌ์ฉ์์ Users ํ
์ด๋ธ์ ๋ํ ํน์ ๊ถํ ์ทจ์
REVOKE SELECT ON Users FROM 'Admin'@'localhost;

[ ํธ๋์ญ์ ์ ์ด ์ธ์ด / TCL ]
Transaction Control Language (TCL)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๋ ์ฌ์ฉ๋๋ ๋ช ๋ น์ด
- ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ๋จ์๋ฅผ ๋ฌถ์ด DML์ ์ํด ์กฐ์๋ ๊ฒฐ๊ณผ๋ฅผ ์์ ๋จ์(ํธ๋์ญ์ ) ๋ณ ์ ์ด
01. COMMIT [ํธ๋์ญ์ ์๊ตฌ ์ ์ฅ]
- COMMIT ๋ช ๋ น๋ฌธ์ ํธ๋์ญ์ ์์ ๋ณ๊ฒฝํ ๋ด์ฉ์ ํ ์ด๋ธ/๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ตฌ ์ ์ฅํ ๋ ์ฌ์ฉ
- ํธ๋์ญ์ (INSERT, UPDATE, DELETE) ์์ ๋ด์ฉ์ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฐ ์คํ ํ์๋ ์ด์ ์ํ๋ก ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅ
02. ROLLBACK [๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์]
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง์ง๋ง ์ปค๋ฐ ์ํ๋ก ๋ณต์
- ์ธ์ด๋ธํฌ์ธํธ ๋ช ๋ น๊ณผ ํจ๊ป ์ฌ์ฉ์ ์ธ์ด๋ธํฌ์ธํธ๋ก ์ ํ ๊ฐ๋ฅ
03. SAVEPOINT [ํธ๋์ญ์ ์ผ์ ์ ์ฅ]
- ๋กค๋ฐฑ ๋ช ๋ น๊ณผ ํจ๊ป ์ฌ์ฉ ์ ํ์ํ ๋๋ง๋ค ์ธ์ด๋ธํฌ์ธํธ ์ง์ ์ผ๋ก ๋กค๋ฐฑ ๊ฐ๋ฅ
# Syntax
# 01. ์ธ์ด๋ธ ํฌ์ธํธ ์์ฑ
SAVEPOINT ์ธ์ด๋ธํฌ์ธํธ ๋ช
;
# 02. ์ธ์ด๋ธ ํฌ์ธํธ๋ก์ ROLLBACK(๋กค๋ฐฑ)
ROLLBACK TO ์ธ์ด๋ธํฌ์ธํธ ๋ช
;