๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

BackEnd๐ŸŒฑ/DB & SQL13

Docker ์ปจํ…Œ์ด๋„ˆ์— MariaDB ์„ค์น˜ํ•˜๊ธฐ ์„œ๋ก ๋งค๋ฒˆ ์ƒˆ๋กœ์šด DB ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๊ฒ€์ƒ‰ํ•˜๋ฉด์„œ ์ฐพ์•„๋ณด๊ธฐ๋„ ๋ฒˆ๊ฑฐ๋กญ๊ณ , ๊ทธ๋ ‡๋‹ค๊ณ  ์„ธํŒ… ์ฃผ๊ธฐ๋„ ๊ทธ๋ ‡๊ฒŒ ์งง์ง€ ์•Š์•„ ๊ธฐ์–ต๋„ ์ž˜ ๋˜์ง€ ์•Š์•„์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ์•„์˜ˆ ๋ฌธ์„œํ™”๋ฅผ ํ•˜๊ณ ์ž ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.๋ชฉ์ฐจDocker ์„ค์น˜MariaDB Container ์„ค์น˜MariaDB ์‚ฌ์šฉ์ž ์ถ”๊ฐ€ ๋ฐ user ๊ถŒํ•œ ์„ค์ •Dokcer์˜ ๋‹ค์–‘ํ•œ ๋ช…๋ น์–ด Docker ์„ค์น˜๋จผ์ € Docker๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด Docker๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Docker์˜ ์„ค์น˜๋Š” https://www.docker.com/์—์„œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Docker๋Š” Docker Engine(Daemon)๊ณผ Docker CLI(Client)๋ฅผ Docker๋ผ๋Š” ์šฉ์–ด๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋“ค์€ Docker์—์„œ ์ œ๊ณตํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.Docker .. 2023. 5. 12.
์ธ๋ฑ์Šค๋ฅผ ์•ˆํƒ€๋Š” ์ฟผ๋ฆฌ๋“ค ์ธ๋ฑ์Šค๋ž€? ์ธ๋ฑ์Šค(Index)๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ƒ‰์ธ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” ์ฃผ๋กœ WHERE ์กฐ๊ฑด์ ˆ์— ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋Š” B-ํŠธ๋ฆฌ(B-tree)๋‚˜ ํ•ด์‹œ ํ…Œ์ด๋ธ”(hash table)๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ DBMS์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์  ๋•Œ๋ฌธ์— B-ํŠธ๋ฆฌ๋ฅผ ์ธ๋ฑ์Šค ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ํŠน์ • ๊ฐ’๋ณด๋‹ค ํฌ๊ณ  ์ž‘์€ ๋ถ€๋“ฑํ˜ธ ์—ฐ์‚ฐ์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ์ฐธ์กฐ ํฌ์ธํ„ฐ๊ฐ€ ์ ์–ด ๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์–‘์—๋„ ๋น ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ์ดํ„ฐ ํƒ์ƒ‰๋ฟ ์•„๋‹ˆ๋ผ, ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ์—๋„ ํ•ญ์ƒ O(logN)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ๋ณดํ†ต INDEX๋ฅผ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์ปฌ๋Ÿผ์— ํ•œ ๊ฐœ ์ด์ƒ์„ ์ฃผ๋ฉด In.. 2023. 3. 23.
[MySQL] UPSERT (ON DUPLICATE KEY UPDATE) ์„œ๋ก  MySQL์—์„œ UPDATE ๋ฌธ๊ตฌ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•  ๋•Œ๋งŒ UPDATE๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฎ์–ด ์”Œ์šฐ๊ธฐ ๊ธฐ๋Šฅ ์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ UPDATE๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ์กด์žฌํ•˜์ง€ ์•Š๋‹ค๋ฉด INSERT๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๊ฒ€์ฆ ํ›„ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋ถ„๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค๋„ ๋˜์ง€๋งŒ ํ˜น์‹œ๋‚˜ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์„๊นŒ ์‹ถ์–ด์„œ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. MySQL UPSERT UPSERT๋Š” ์ด๋ฆ„์—์„œ๋„ ๋ณด์ด๋“ฏ์ด UPDATE์™€ INSERT๋ฅผ ํ•ฉ์นœ ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. MySQL์—์„œ๋Š” ์ด๋Ÿฌํ•œ UPSERT ๊ธฐ๋Šฅ์„ 4.1 ์ด์ƒ ๋ฒ„์ „๋ถ€ํ„ฐ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, UPSERT๋Š” ์ค‘๋ณต๋˜๋Š” ๊ฐ’(UNIQUE KEY)์ด ์žˆ๋‹ค๋ฉด UPDATE๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ์ค‘๋ณต๋˜๋Š” ๊ฐ’์ด ์—†๋‹ค๋ฉด INSERT๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. UPSERT๋Š” ON D.. 2022. 5. 23.
[MySQL] SELECT ๋ฌธ์—์„œ NULL ๊ฐ’ ์น˜ํ™˜ํ•˜๊ธฐ IFNULL(?, ?) ์ปฌ๋Ÿผ์ด NULL์ด๋ฉด 0์œผ๋กœ ์น˜ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ SELECT IFNULL(์ปฌ๋Ÿผ๋ช…, 0) FROM TEST ; ์ปฌ๋Ÿผ์ด NULL์ด๋ฉด -- ์œผ๋กœ ์น˜ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ SELECT IFNULL(์ปฌ๋Ÿผ๋ช…, '--') FROM TEST ; IF() ์ปฌ๋Ÿผ์ด NULL์ผ ๊ฒฝ์šฐ 1์„, NULL์ด ์•„๋‹๋•Œ๋Š” 2๋ฅผ returnํ•œ๋‹ค. SELECT IF(์ปฌ๋Ÿผ๋ช… IS NULL, '1', '2') FROM ํ…Œ์ด๋ธ”๋ช… NULLIF(?, ?) (์ „์ž == ํ›„์ž) ์˜ ๊ฒฐ๊ณผ๊ฐ€ false๋ฉด ์ „์ž์˜ ๊ฐ’์„ return ํ•˜๊ณ , true์ด๋ฉด NULL์„ return ํ•œ๋‹ค. SELECT NULLIF(1, 1) ; --> null ์„ ๋ฆฌํ„ดํ•œ๋‹ค. SELECT NULLIF(1, 2) ; --> 1์„ ๋ฆฌํ„ดํ•œ๋‹ค. 2022. 5. 12.