๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ก Computer Science/๐Ÿ’พ Database

[TIL] MySQL ๋ช…๋ น์–ด ์ •๋ฆฌ

by sgaeng 2023. 3. 6.

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์†

: MYSQL ํด๋ผ์ด์–ธํŠธ๋กœ ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ„ฐ๋ฏธ๋„์— ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅ

$ mysql -u ์‚ฌ์šฉ์ž์ด๋ฆ„ -p

 

 

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ

: MYSQL ์„œ๋ฒ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ

mysql> SHOW DATABASES;

 

3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ

: MYSQL ์„œ๋ฒ„์— ์ ‘์† ํ›„, ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ

mysql> USE ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฆ„;

4. ํ…Œ์ด๋ธ” ์กฐํšŒ

: ์„ ํƒํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ์กฐํšŒ

mysql> SHOW TABLES;

 

 

5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“œ๋Š” ๋ช…๋ น์–ด

mysql> CREATE DATABASE ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฆ„;

6. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด(์Šคํ‚ค๋งˆ)๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด

ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด๋ถ€์˜ ๋ชจ๋“  ๊ฐ์ฒด(ํ…Œ์ด๋ธ”, ๋ทฐ, ์ธ๋ฑ์Šค ๋“ฑ)๊ฐ€ ์™„์ „ํžˆ ์‚ญ์ œ๋œ๋‹ค.

(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž˜๋ชป ๋งŒ๋“ค์—ˆ๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๊ณ  ์‹ถ์„ ๋•Œ, ์ง€์›Œ๋„ ์ƒ๊ด€์—†์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.)

mysql> DROP DATABASE ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฆ„;

 

7. ์œ ์ € ๋งŒ๋“œ๋Š” ๋ช…๋ น์–ด

- ์‚ฌ์šฉ์ž์ด๋ฆ„: ์ƒˆ๋กœ์šด ์œ ์ €์˜ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์œ ์ € ์ด๋ฆ„์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ , ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€์ด๋‹ค.

- ํ˜ธ์ŠคํŠธ: ์œ ์ €์˜ ์ ‘์†์„ ํ—ˆ์šฉํ•  ํ˜ธ์ŠคํŠธ๋ฅผ ์ง€์ •ํ•œ๋‹ค. ๋ณดํ†ต localhost๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์—์„œ๋งŒ ์ ‘์†์„ ํ—ˆ์šฉํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค. % ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ํ˜ธ์ŠคํŠธ์—์„œ๋“  ์ ‘์†์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (BUT ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํŠน์ • ํ˜ธ์ŠคํŠธ๋งŒ ํ—ˆ์šฉํ•˜๋„๋ก ์ƒ์„ฑํ•ด์„œ ์•ˆ์ „ํ•˜๊ฒŒ DB๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜์ž!)

- ๋น„๋ฐ€๋ฒˆํ˜ธ: ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

mysql> CREATE USER '์‚ฌ์šฉ์ž์ด๋ฆ„'@'ํ˜ธ์ŠคํŠธ' IDENTIFIED BY '๋น„๋ฐ€๋ฒˆํ˜ธ';

[์ฐธ๊ณ ]

๋ชจ๋“  ํ˜ธ์ŠคํŠธ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์œ ์ €๋ฅผ ๋งŒ๋“œ๋Š” ๋ช…๋ น์–ด

mysql> CREATE USER '์‚ฌ์šฉ์ž์ด๋ฆ„'@'%' IDENTIFIED BY '๋น„๋ฐ€๋ฒˆํ˜ธ';

์œ„์™€ ๊ฐ™์ด ํ•  ๋•Œ ์žฅ๋‹จ์ ์ด ์žˆ๋‹ค.

- ์žฅ์ 

1. ํด๋ผ์šฐ๋“œ ๋ฐ ๋ถ„์‚ฐ ํ™˜๊ฒฝ or ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ๊ฐ€ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ โžก๏ธ ์ถ”๊ฐ€์  ๊ถŒํ•œ ์„ค์ • ์ž‘์—…์ด ์—†์–ด์ง

    : ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์ด๋‚˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ๋Š” ํ˜ธ์ŠคํŠธ IP๊ฐ€ ๋™์ ์œผ๋กœ ํ• ๋‹น๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ด์„œ IP ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์ถ”๊ฐ€์ ์ธ ๊ถŒํ•œ ์„ค์ • ์ž‘์—…์„ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค.

- ๋‹จ์ 

1. ๋ณด์•ˆ ์ทจ์•ฝ

    : ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, DB๊ฐ€ ์™ธ๋ถ€ ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

2. ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ˜ธ์ŠคํŠธ์—์„œ์˜ ์—‘์„ธ์Šค๊ฐ€ ํ—ˆ์šฉ๋  ์ˆ˜ ์žˆ์Œ

    : ๋ฐ์ดํ„ฐ ์œ ์ถœ ๋ฐ DB์˜ ๊ฒฐํ•จ์„ ์•…ํ™” ์‹œํ‚จ๋‹ค.

3. ๋กœ๊ทธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž‘์—…์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ

    : ๋ชจ๋“  ํ˜ธ์ŠคํŠธ์—์„œ์˜ ์ ‘๊ทผ์œผ๋กœ ์ธํ•ด, ์—‘์„ธ์Šค ๋กœ๊ทธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ด์ƒ ์ง•ํ›„๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.

 

 

8. ์œ ์ € ์กฐํšŒ ๋ฐฉ๋ฒ•

mysql> SELECT user, host FROM mysql.user;

 

 

 

๐Ÿ– ์—ฌ๊ธฐ์„œ ์ž ๊น!! (๊ถŒํ•œ๋ฌธ์ œ)

์ผ๋ฐ˜ ์œ ์ €๋กœ mysql server์— ์ ‘์†ํ•ด์„œ ๋‹ค๋ฅธ ์œ ์ €๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด user table์„ ์กฐํšŒํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

mysql> SELECT user, host FROM mysql.user;
ERROR 1142 (42000): SELECT command denied to user 'wanted'@'localhost' for table 'user'

์ด๋Š” ์ผ๋ฐ˜ ์œ ์ €(์—ฌ๊ธฐ์„œ๋Š” wanted)๊ฐ€ 'user'ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ SELECT๊ถŒํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค.

์ด ๊ฒฝ์šฐ, root ๊ถŒํ•œ์œผ๋กœ mysql server์— ์žฌ์ ‘์† ํ›„ GRANT ๋ช…๋ น์–ด๋กœ ์ผ๋ฐ˜ ์œ ์ € (์—ฌ๊ธฐ์„œ๋Š” wanted)์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

(๋˜ ๋‹ค๋ฅธ ๊ฒฝ์šฐ)

์—ฌ๊ธฐ์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ผ๋ฐ˜ ์œ ์ €๋Š” DATABASE๋ฅผ ๋งŒ๋“ค ๊ถŒํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, root ๊ถŒํ•œ์œผ๋กœ ์žฌ์ ‘์† ํ›„ ์ผ๋ฐ˜ ์œ ์ €(์—ฌ๊ธฐ์„œ๋Š” wanted)์—๊ฒŒ 'preonboarding'์ด๋ผ๋Š” DATABASE์˜ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

(์•„๋ž˜๋Š” ์œ„์˜ ์—๋Ÿฌ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด๋‹ค.)

[1] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค 'preonboarding'์— ๋Œ€ํ•œ 'wanted'@'localhost' ์œ ์ €์˜ ๊ถŒํ•œ์„ ํ™•์ธ

mysql> SHOW GRANTS FOR 'wanted'@'localhost';


[2] 'wanted'@'localhost' ์œ ์ €์—๊ฒŒ 'preonboarding' ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ถŒํ•œ์„ ๋ถ€์—ฌ

mysql> GRANT [๊ถŒํ•œ] ON [๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค].* TO '[์‚ฌ์šฉ์ž]'@'[ํ˜ธ์ŠคํŠธ]';

mysql> GRANT ALL PRIVILEGES ON preonboarding.* TO 'wanted'@'localhost';

(โž• ์ถ”๊ฐ€ ๋ช…๋ น์–ด )

mysql> FLUSH PRIVILEGES;

๋‚˜๋Š” GRANT ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์ง€๋งŒ,

๋งŒ์•ฝ INSERT, UPDATE, DELETE ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ DB์— ๋ณ€ํ™”๋ฅผ ์ค€๋‹ค๋ฉด FLUSH PRIVILEGES; ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•ด์ค˜์•ผํ•œ๋‹ค.

GRANT ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” FLUSH PRIVILEGES; ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. (FLUSH PRIVILEGES ๋ช…๋ น์–ด๋Š” ์„ฑ๋Šฅ์— ๋ถ€ํ•˜๋ฅผ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.)

 

 


<๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์— ๋“ค์–ด๊ฐ„ ๋’ค์— (์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ ํƒํ•œ ๋’ค์—) ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด (DML)>

1. ๋ฐ์ดํ„ฐ ์กฐํšŒ

mysql> SELECT * FROM ํ…Œ์ด๋ธ”์ด๋ฆ„;

 

2. ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

mysql> INSERT INTO ํ…Œ์ด๋ธ”์ด๋ฆ„ (์—ด1, ์—ด2, ์—ด3, ...) VALUES (๊ฐ’1, ๊ฐ’2, ๊ฐ’3, ...);

 

3. ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

mysql> UPDATE ํ…Œ์ด๋ธ”์ด๋ฆ„ SET ์—ด1=๊ฐ’1, ์—ด2=๊ฐ’2 WHERE ์กฐ๊ฑด;

 

4. ๋ฐ์ดํ„ฐ ์‚ญ์ œ

ํ•ด๋‹น ์กฐ๊ฑด๋ฌธ(์—ด์˜ ์กฐ๊ฑด)์— ๋งž๋Š” ๋ฐ์ดํ„ฐ(ํ–‰)๋งŒ ์‚ญ์ œ ํ•˜๋Š” ๋ช…๋ น์–ด

๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ(๋‹ค๋ฅธ ํ–‰)์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ , ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.

mysql> DELETE FROM ํ…Œ์ด๋ธ”์ด๋ฆ„ WHERE ์กฐ๊ฑด;

 

5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์˜ ํ…Œ์ด๋ธ” ์ƒ์„ฑ

Migration์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ORM(Object-Relational-Mapping) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

Migration์„ ์‚ฌ์šฉํ•˜๋ฉด CREATE TABLE ๋ช…๋ น์–ด ์—†์ด ๊ด€๊ณ„ํ…Œ์ด๋ธ”๋“ค์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

BUT ์‰˜ ์•ˆ์—์„œ CREATE TABLE ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค!

mysql> CREATE TABLE ํ…Œ์ด๋ธ”์ด๋ฆ„ (
    column1 data_type,
    column2 data_type,
    column3 data_type,
    ...
);

 

6. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์˜ ํ…Œ์ด๋ธ” ์‚ญ์ œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด ํŠน์ • ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ & ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ์‚ญ์ œ ํ•˜๋Š” ๋ช…๋ น์–ด

mysql> DROP TABLE ํ…Œ์ด๋ธ”์ด๋ฆ„;

๐Ÿ’ก ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

: (DELETE์ด ์•„๋‹Œ) DROP ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  CREATE ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

DELETE, TRUNCATE, DROP ๋ช…๋ น์–ด ์ฐจ์ด์ 

https://wikidocs.net/4021

'๐Ÿ’ก Computer Science > ๐Ÿ’พ Database' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL] Postgres/PostgreSQL ๋ช…๋ น์–ด ์ •๋ฆฌ  (0) 2022.03.17
[ERROR] ERROR: syntax error at or near "-"  (0) 2022.03.01