๐Ÿง TIL/๐Ÿ—„๏ธ Database

Upsert query?- ์ค‘๋ณต๋˜๋Š” ๊ฐ’์ด ์žˆ๋‹ค๋ฉด UPDATE, ์—†๋‹ค๋ฉด INSERT- ์ˆ˜์ • ๋กœ์ง ์งค๋•Œ ๋ฐ”๋€ ๊ฐ’๋งŒ UPDATEํ•˜๊ณ , ์ˆ˜์ •ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผํ•  ๋•Œ๋Š” INSERT๋ฅผ ํ•ด์ค€๋‹ค.- ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณด๋ฉด ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๊ฐ€ ์ด๋ฏธ ์žˆ๊ณ  refresh_token ๊ฐ’๋งŒ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์‹ถ์„๋•Œ Upsert๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.INSERT INTO refresh_token (user_id, refresh_token)VALUES (#{userId}, #{refreshToken}) ON DUPLICATE KEYUPDATE refresh_token = #{refreshToken}
์ดˆ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ mysql ์„ค์น˜ ํ›„ ์ดˆ๊ธฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋žœ๋ค์œผ๋กœ ์ง€์ •๋œ๋‹ค. sudo grep 'temporary password' /var/log/mysqld.log ๋‚˜๋Š” ๋‘๋ฒˆ์งธ๊บผ๋กœ ํ–ˆ์„๋•Œ ์ ‘์†์ด ๋๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ Mysql ์ ‘์† ํ›„ ALTER๋ฌธ ํ™œ์šฉํ•ด์„œ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค. alter user 'root'@'localhost' identified by '์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ'
SQL - JOIN ์ •๋ฆฌ ์˜ˆ์‹œ ํ…Œ์ด๋ธ” Table: employees +--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | dept_id | +--------+--------------+------------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 4 | | 2 | Tony Montana | 2002-07-15 | 1 | | 3 | Sarah Connor | 2005-10-18 | 5 | | 4 | Rick Deckard | 2007-01-03 | 3 | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+--..
๐Ÿ›Ÿ Subquery - ์ฟผ๋ฆฌ ์•ˆ์˜ ์ฟผ๋ฆฌ - ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆœ ์žˆ์ง€๋งŒ, ๋” ํŽธํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ด์ค€๋‹ค. 1. ๋น„๊ตํ•˜๊ธฐ inner join VS subquery - ์นด์นด์˜คํŽ˜์ด ๊ฒฐ์ œ ์œ ์ €๋“ค์˜ ์ •๋ณด ๋ณด๊ธฐ 1) inner join select u.user_id, u.name, u.email from users u inner join orders o on u.user_id = o.user_id where o.payment_method = 'kakaopay'; 2) Subquery โ‘  ์นด์นด์˜คํŽ˜์ด๋กœ ๊ฒฐ์ œํ•œ user_id ๋ชจ๋‘ ๊ตฌํ•˜๊ธฐ select user_id from orders where payment_method = 'kakaopay' โ‘ก user_id๊ฐ€ ์ƒ๋‹จ์— ..
๐Ÿชข Join - ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ํ•œ ๋ˆˆ์— ๋ณด๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. - ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ณตํ†ต๋œ ์ •๋ณด(key๊ฐ’) ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•ด์„œ ํ•œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ๋ณด๋Š” ๊ฒƒ - point_user ํ…Œ์ด๋ธ”๊ณผ users ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•ด์ค˜. -> ๊ณตํ†ต๋œ ํ‚ค๊ฐ’์€ 'user_id' select * from point_users left join users on point_users.user_id = users.user_id 1) Left Join - ์™ผ์ชฝ ํ…Œ์ด๋ธ”์„ ์ค‘์‹ฌ์œผ๋กœ ์˜ค๋ฅธ์ชฝ์˜ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•œ๋‹ค. - ์–ด๋–ค ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋“  ํ•„๋“œ๊ฐ€ ์ฑ„์›Œ์ ธ์žˆ์ง€๋งŒ, ์–ด๋–ค ๋ฐ์ดํ„ฐ๋Š” ๋น„์–ด์žˆ๋Š” ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค. - ex) ํšŒ์›์ด์ง€๋งŒ ์ˆ˜๊ฐ• ๋“ฑ๋ก ๋˜๋Š” ์‹œ์ž‘ํ•˜์ง€ ์•Š์•„ ํฌ์ธํŠธ๊ฐ€ null ๊ฐ’์ผ๋•Œ https://www.w3schools.com/sql/sql_join_left..
๐Ÿ•ธ๏ธ Group by - ์›ํ•˜๋Š” ์œ ํ˜•๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™” ํ•ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. - ๋™์ผํ•œ ๋ฒ”์ฃผ๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์„œ, ๋ฒ”์ฃผ๋ณ„ ํ†ต๊ณ„๋ฅผ ๋‚ด์ฃผ๋Š” ๊ฒƒ. - ~๋ณ„ ๐Ÿ™‹โ€โ™€๏ธ Group by๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ from -> group by -> select 1) from orders: orders ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. 2) group by payment_method: ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ์—์„œ ๊ฐ™์€ payment_method๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ ํ•ฉ์ณ์ค€๋‹ค. 3) select payment_method: payment_method ๋ณ„๋กœ ๊ทธ๋ฃนํ™” ๋œ ๊ทธ๋ฃน๋“ค์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค. - ๊ฒฐ์ œ์ˆ˜๋‹จ๋ณ„๋กœ ๊ทธ๋ฃนํ™” ํ•ด์„œ ๋ณด์—ฌ์ค˜. select payment_method from orders group by payment_method; ..
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค? - ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ™์ด ์‚ฌ์šฉํ•  ๋ชฉ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ํ†ต - ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์ œ๊ณต ๋œ๋‹ค. ๋”๋ณด๊ธฐ 1) Create - ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ 2) Read - ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ 3) Update - ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ 4) Delete - ์‚ญ์ œ SQL? - Structured Query Language - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์š”์ฒญ(Query)์„ ๋ณด๋‚ด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋„์™€์ฃผ๋Š” ์–ธ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ = 'SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.' 1. Select ์ฟผ๋ฆฌ๋ฌธ - ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ฒ ๋‹ค๋Š” ๋ช…๋ น์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๊ฒŒ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ - 1๏ธโƒฃ ์–ด๋–ค ํ…Œ์ด๋ธ”์—์„œ 2๏ธโƒฃ ์–ด๋–ค ํ•„๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ์ง€๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๐Ÿ™‹โ€โ™€๏ธ ํ…Œ์ด๋ธ”? ํ•„๋“œ?..
๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ - ์ž˜ ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ๋„ ๋งž์ง€๋งŒ, ์ž˜ ์ฐพ์œผ๋ ค๊ณ  ์กด์žฌํ•˜๋Š” ๊ฒƒ - ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ๊ณ  ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋งŽ์€ ์–‘์˜ ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 1) ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - SQL - ์ •๋ฆฌ๋œ ์ •๋ณด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉ - ex) Oracle 2) ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - NoSQL - ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์œ ์—ฐํ•œ ์ •๋ณด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉ - ex) Firestore Database ๐Ÿ”ฅ Firestore Database (firebase) - ๊ตฌ๊ธ€์˜ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. 1) Collection - ์„œ๋ž์žฅ์˜ ๊ทธ๋ฃน, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์„œ๋“ค์ด ํŠน์ •ํ•œ ์ฃผ์ œ ๋˜๋Š” ์œ ํ˜•์œผ..