SQL - Drizzle Self Reference
ยท
๐Ÿงฉ SQL
โœ… Self Referenceexport const postReplies = pgTable("post_replies", { post_reply_id: bigint({ mode: "number" }) .primaryKey() .generatedAlwaysAsIdentity(), post_id: bigint({ mode: "number" }).references(() => posts.post_id, { onDelete: "cascade", }), parent_id: bigint({ mode: "number" }).references( (): AnyPgColumn => postReplies.post_reply_id, // AnyPgColumn์€ ์ž์ฒด ์ฐธ์กฐ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”(ํƒ€์ž… ์•ˆ..
SQL - Supabase & Drizzle
ยท
๐Ÿงฉ SQL
โœ… Installationnpm i drizzle-orm postgresnpm i -D drizzle-kit import { drizzle } from "drizzle-orm/postgres-js"; https://orm.drizzle.team/docs/connect-supabase Drizzle ORM - SupabaseDrizzle ORM is a lightweight and performant TypeScript ORM with developer experience in mind.orm.drizzle.team โœ… Setupimport { defineConfig } from "drizzle-kit";export default defineConfig({ schema: "./app/features/*..
SQL - Drizzle(ORM)
ยท
๐Ÿงฉ SQL
โœ… Drizzle์ด๋ž€?Javascript ๋˜๋Š” Typescript๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ORM(Object Relational Mapping)(Python ์ง€์› X)SQL ์œ„์— ์•„์ฃผ ์–‡์€ ๋ ˆ์ด์–ด๋ฅผ ์”Œ์›Œ ๋†“์€ ๊ฒƒ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.(VSCode์˜ ์ž๋™์™„์„ฑ, Typescript์˜ ํƒ€์ž… ๊ฐ€๋“œ๊นŒ์ง€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.) Python์— ๋น„ํ•ด Javascript๋Š” ๋ชจ๋“  ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ŠคํŽ™ ๊ฐ™์€ ๊ฑด ์—†๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“œ๋ผ์ด๋ฒ„ ์ข…๋ฅ˜๋Š” ๋˜๊ฒŒ ๋งŽ๋‹ค.Drizzle์„ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๊ฒ‰์œผ๋กœ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๊ฒŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์–ด๋Œ‘ํ„ฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ DB์™€ ํ†ต์‹ ํ•œ๋‹ค. (์–ด๋Œ‘ํ„ฐ๋ฅผ ์„ค์น˜ํ•˜๋ฉด Drizzle์ด ๊ทธ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•œ๋‹ค.) โœ… InstallationDrizzle ORMbun a..
SQL - SQL with Python
ยท
๐Ÿงฉ SQL
โœ… Python ํ™˜๊ฒฝ์—์„œ SQLite ์‚ฌ์šฉํ•˜๊ธฐPlaceholderimport sqlite3connection = sqlite3.connect("users.db")cursor = connection.cursor()def init_table(): cursor.execute( """ CREATE TABLE users ( user_id integer primary key autoincrement, username text not null, password text not null ); """ ) cursor.execute( """ insert into users (username, password) ..
SQL - SQL Injection
ยท
๐Ÿงฉ SQL
โœ… SQL Injection์ด๋ž€?์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ด์šฉํ•ด “์˜๋„ํ•˜์ง€ ์•Š์€ SQL ์ฟผ๋ฆฌ”๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ณต๊ฒฉ์˜ˆ๋ฐฉ ๋ฐฉ๋ฒ•: String Interpolation์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.import sqlite3connection = sqlite3.connect("users.db")cursor = connection.cursor()def init_table(): cursor.execute( """ CREATE TABLE users ( user_id integer primary key autoincrement, username text not null, password text not null ); """ ) cursor.execute( ..
Redis - Get Started
ยท
๐ŸŽฏ Redis
โœ… Redis๋ž€?(Remote Dictionary Service)์†๋„๊ฐ€ ์–ด์–ด์–ด์–ดใ…“ใ…์ฒญ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค.๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋‹ค๋ฅธ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. Redis๋Š” Key Value In-memory ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‹ค.(SQL, MongoDB ๋“ฑ์€ ๋””์Šคํฌ์—์„œ ๊ฐ’์„ ์ฝ์–ด์˜ค๋А๋ผ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฌ๋‹ค.) ์žฅ์ : ๋น ๋ฅด๋‹ค.๋‹จ์ : ๋น„์‹ธ๋‹ค. ์šฉ๋Ÿ‰์ด ํ•˜๋“œ ๋””์Šคํฌ์ฒ˜๋Ÿผ ์ถฉ๋ถ„ํ•˜์ง€๊ฐ€ ์•Š๊ธฐ์—, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋“ค์„ ๋ณด์กฐํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค. โœ… ์„ค์น˜brew install redisbrew services start redis โœ… Usecase๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์„œ cli๋ฅผ ํ™œ์„ฑํ™”ํ•œ๋‹ค.redis-cli GET, SETโ•ฐโ”€ redis-cli ..
SQL - PostgreSQL, Extensions
ยท
๐Ÿงฉ SQL
โœ… ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ PostgreSQL์˜ Extensions ๋ชฉ๋ก ๋ณด๋Š” ๋ฒ•SELECT *FROM pg_available_extensions; โœ… Extension ํ™œ์„ฑํ™” ๋ฐฉ๋ฒ•CREATE EXTENSION hstore; โœ… hstoreKey, Value ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.(ํ˜„์žฌ๋Š” JSONB๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.) CREATE TABLE users ( user_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, prefs hstore);INSERT INTO users (prefs)VALUES ('theme => dark, lang => kr, notifications => off'), ('theme => light, lang => es, notificat..
SQL - PostgreSQL, JSON Column
ยท
๐Ÿงฉ SQL
โœ… JSON Column์ด๋ž€?ํ…Œ์ด๋ธ” ์•ˆ์— JSON ํ˜•์‹ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ColumnMySQL๊ณผ PostgreSQL ๋ชจ๋‘ JSON ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฑธ ํ—ˆ์šฉํ•œ๋‹ค. SQL์ด๋ฉด์„œ ๋™์‹œ์— NoSQL์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค. ์‚ฌ์šฉ ์‹œ๊ธฐ: ์œ ์—ฐํ•œ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ(์–ด๋– ํ•œ column์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•  ์ง€ ๋ชจ๋ฅผ ๋•Œ)์œ ์—ฐ์„ฑ↑, ๊ตฌ์กฐ ์•ˆ์ •์„ฑ↓ โœ… JSON, JSONB๊ฑฐ์˜ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.์ฐจ์ด์ ์€ ํšจ์œจ์„ฑ์ด๋‹ค.JSON vs JSONBJSON: ์ž…๋ ฅ๋œ text๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ ์ €์žฅํ•จJSONB: ๋ถ„ํ•ด๋œ Binary ํ˜•์‹์œผ๋กœ ์ €์žฅํ•จ(๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์†๋„๊ฐ€ ์•ฝ๊ฐ„ ๋А๋ ค์ง„๋‹ค. JSON์—์„œ Binary๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ, ์ฒ˜๋ฆฌ ์†๋„๋Š” ์—„์ฒญ ๋นจ๋ผ์ง, ๋Œ€๋ถ€๋ถ„ JSONB ์„ ํ˜ธ) CREATE TABLE users ( u..
SQL - PostgreSQL, DCL(Data Control Language)
ยท
๐Ÿงฉ SQL
โœ… DCL(Data Control Language)DDL: Data Definition LanguageDML: Data Manipulation LanguageTCL: Transaction Control LanguageDCL: ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์–ธ์–ด role ์ƒ์„ฑCREATE ROLE marketerWITH login PASSWORD 'marketing4ever';๋น„๋ฐ€๋ฒˆํ˜ธ OCREATE ROLE editor;๋น„๋ฐ€๋ฒˆํ˜ธ X role์— ๊ถŒํ•œ ๋ถ€์—ฌGRANT SELECT ON movies TO marketer;์ฝ๊ธฐ ๊ถŒํ•œ๋งŒ ์žˆ์Œ GRANTSELECT,UPDATE,INSERT ON movies TO marketer;GRANTSELECT, INSERT ON st..
SQL - PostgreSQL, Transaction, Save Point, Isolation Level, Phenomena
ยท
๐Ÿงฉ SQL
โœ… Transaction์ด๋ž€?Transaction = ์—ฌ๋Ÿฌ ์ž‘์—…์„ “ํ•˜๋‚˜์˜ ๋ฌถ์Œ”์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ์œ„ ์—ฌ๋Ÿฌ SQL ์ฟผ๋ฆฌ์— ๊ฑธ์ณ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ(integrity)์„ ๊ฐ•์ œํ•œ๋‹ค.์€ํ–‰, ํ•ญ๊ณต์‚ฌ, ์˜จ๋ผ์ธ ํ‹ฐ์ผ“ ์˜ˆ๋งค ์‹œ์Šคํ…œ ๋“ฑ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์‚ฐ์—…๋“ค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. Commit; ๋˜๊ธฐ ์ „๊นŒ์ง€ ํ•œ Transaction์—์„œ ๋งŒ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ๋‹ค๋ฅธ Transaction์—์„œ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.(SELECT, UPDATE, DELETE ๊ฐ™์€ ๋ฌธ๋“ค์€ ์‚ฌ์‹ค ํ•˜๋‚˜์˜ ์ž‘์€ Transaction๋“ค์ด๋‹ค.)Transaction์˜ 4๊ฐ€์ง€ ์„ฑ์งˆ Transaction ์‚ฌ์šฉ๋ฒ•BEGIN;UPDATE accountsSET balance = balance - 500WHERE account_holder = 'nico';SELECT *FROM ..
SQL - PostgreSQL, Extension(plpython3)
ยท
๐Ÿงฉ SQL
โœ… pl(procedural language)python3ํŒŒ์ด์ฌ์œผ๋กœ procedure๋‚˜ function์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ค์น˜PostgreSQL์„ ์„ค์น˜ํ•  ๋•Œ ๊ฐ™์ด ์„ค์น˜ ๋˜์—ˆ๋˜ Application Stack Builder๋ฅผ ์‹คํ–‰ ์‹œํ‚จ๋‹ค.Application Stack Builder๋กœ PostgreSQL Extension์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹คํ–‰์‹œํ‚ค๊ณ  EDB Language Pack์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๋‹ค. ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œ์ผœ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ํ™œ์„ฑํ™” ์‹œํ‚จ๋‹ค.CREATE EXTENSION plpython3u; *์ฃผ์˜*์„ค์น˜ ๋˜์–ด ์žˆ๋Š” python, postgreSQL์˜ ํ™˜๊ฒฝ์ด ๋งž์•„์•ผ ํ•œ๋‹ค.๋‘˜ ๋‹ค ์‚ฌ์ดํŠธ์—์„œ ์„ค์น˜ํ•œ ํ™˜๊ฒฝ์ด๊ฑฐ๋‚˜, ๋‘˜ ๋‹ค homebrew๋กœ ์„ค์น˜ํ•œ ํ™˜๊ฒฝ์ด์–ด์•ผ ํ•œ๋‹ค.์ด ๋•Œ, homebr..
SQL - PostgreSQL, Function, Procedure
ยท
๐Ÿงฉ SQL
โœ… Function & ProcedureFunction๊ณผ Procedure๋Š” Database Object๋‹ค.์ด ๋‘˜์„ ์ด์šฉํ•˜๋ฉด ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” SQL๊ตฌ๋ฌธ์„ ์„ธํŠธ๋กœ ์บก์Аํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.(์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ) โœ… FunctionFunction์€ ๋ฐ˜๋“œ์‹œ value๋ฅผ returnํ•œ๋‹ค.(Procedure์™€์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ) DML(Data Manipulation Language) Command์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒCREATE OR REPLACE FUNCTION hello_world ()RETURNS TEXT AS$$ SELECT 'hello_world';$$LANGUAGE SQL;LANGUAGE ํ‚ค์›Œ๋“œ๋กœ ์–ด๋–ค ์–ธ์–ด๋กœ Function์ด ์ž‘์„ฑ ๋˜์—ˆ๋Š”์ง€ ์ ์–ด์ค˜์•ผ ํ•œ๋‹ค. CREATE OR REPLACE FUNCTION ..
SQL - PostgreSQL, UNNEST, DISTINCT, FULL OUTER JOIN
ยท
๐Ÿงฉ SQL
โœ… UNNESTSELECT UNNEST(string_to_array(genres, ','))FROM moviesGROUP BY genres; ,๋กœ ๊ตฌ๋ถ„๋˜์–ด ์—ฌ๋Ÿฌ ์žฅ๋ฅด๋“ค์ด ํ•œ string์œผ๋กœ ์ด์–ด์ ธ ์žˆ๋˜ genres column์„ string_to_array(genres, ',') ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ,๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ณ„ํ•œ๋‹ค์Œ array๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ array๋ฅผ UNNEST()๋ฅผ ์ด์šฉํ•˜์—ฌ array๋ฅผ ํ’€์–ด์„œ ๋ชจ๋“  genre ๊ฐ’๋“ค์ด ํ•œ row์— ํ•˜๋‚˜์˜ genre๋งŒ ๊ฐ€์ง€๋„๋ก ๋ฐ”๊ฟจ๋‹ค. โœ… DISTINCTSELECT DISTINCT UNNEST(string_to_array(genres, ','))FROM moviesGROUP BY genres;๊ทธ ํ›„ DISTINCT ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค‘๋ณต๋˜๋Š” ๊ฐ’๋“ค์„ ์ „๋ถ€ ์ง€์šด..
SQL - PostgreSQL, Data Types
ยท
๐Ÿงฉ SQL
โœ… Data TypesCREATE TYPE gender_type AS ENUM ('male', 'female');CREATE TABLE users ( -- 0 2KB TOAST (the oversized-attribute storage technique) bio TEXT, profile_photo BYTEA, -- SMALLINT -- Signed: -32,768 to 32,767 -- INTGER -- Signed: -2,147,483,648 to 2,147,483,647 -- BIGINT -- Signed: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 -- SMALLSERIAL (1 to 32,767) -- SERIAL (1 to 2,147,4..
SQL - PostgreSQL, pgAdmin
ยท
๐Ÿงฉ SQL
โœ… pgAdmin์ด๋ž€?๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ GUI ํ”„๋กœ๊ทธ๋žจ โœ… ConnectionpgAdmin์—์„œ Databases๋ฅผ ์šฐํด๋ฆญํ•ด ์ƒˆ Database๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค. pgAdmin์—์„œ PostgreSQL 18์„ ์šฐํด๋ฆญํ•ด์„œ properties๋ฅผ ์—ฐ๋‹ค. ๊ทธ ๋‹ค์Œ Beekeeper Studio๋“ , TablePlus๋“  DBeaver๋“  ์—ด์–ด์„œ PostgreSQL์„ ์„ ํƒ. Test๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์ด๋ ‡๊ฒŒ ์ดˆ๋ก์ƒ‰์œผ๋กœ ๋œจ๋ฉด ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป.Connect๋ฅผ ๋ˆŒ๋Ÿฌ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋
SQL - PostgreSQL ์„ค์น˜(๊ณต์‹ ์‚ฌ์ดํŠธ, Homebrew)
ยท
๐Ÿงฉ SQL
โœ… ๊ณต์‹ ์‚ฌ์ดํŠธ ์„ค์น˜https://www.postgresql.org/download PostgreSQL: Downloads www.postgresql.org ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ ์„ค์น˜ํ•˜๋ฉด1. PostgreSQL Server2. psql(CLI)3. pgAdmin(MySQL์˜ MySQLWorkbench ๊ฐ™์€ GUI ํ”„๋กœ๊ทธ๋žจ)4. Stack Builder(ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์„ค์น˜)์ด๋Ÿฐ ์ถ”๊ฐ€ ํ”„๋กœ๊ทธ๋žจ๋“ค๊นŒ์ง€ ๊ฐ™์ด ์„ค์น˜๋œ๋‹ค. Homebrew๋กœ PostgreSQL Server๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋‚˜๋จธ์ง€๋Š” ์ง์ ‘ ์„ค์น˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค. โœ… Homebrew ์„ค์น˜์ด๋ฏธ ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ PostgreSQL์„ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ์‚ญ์ œํ•˜๊ณ  Homebrew ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค. *์ฃผ์˜*Homebrew๋กœ ์„ค์น˜ํ•˜๋ฉด plpython3u extension์„ ..
SQL - MySQL, Full Text Index
ยท
๐Ÿงฉ SQL
โœ… Full Text Index๋ž€?๋ฌธ์žฅ(ํ…์ŠคํŠธ) ์•ˆ์—์„œ ๋‹จ์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์ธ๋ฑ์ŠคLIKE๋Š” ๋ฌธ์ž์—ด ๋น„๊ตFULLTEXT๋Š” “๊ฒ€์ƒ‰ ์—”์ง„ ๋ฐฉ์‹” โœ… UsageNatural Language Mode์ฃผ์–ด์ง„ text์™€ ์—ฐ๊ด€์„ฑ์ด ๋†’์€ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์˜๋ฏธ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด the, a ๊ฐ™์€ ๋ถˆ์šฉ์–ด๋Š” ๊ฒ€์ƒ‰์—์„œ ์ œ์™ธ๋จCREATE FULLTEXT INDEX idx_overview ON movies (overview);SELECT title, overviewFROM moviesWHERE MATCH(overview) AGAINST ('the food'); Boolean Mode• ํŠน์ˆ˜ ๋ฌธ์ž(Operator):โ–ซ ‎`+` : ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋˜์–ด์•ผ ํ•จ (AND)โ–ซ ‎`-` : ํ•ด๋‹น ๋‹จ์–ด๊ฐ€ ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋˜๋ฉด ์•ˆ ๋จ..
SQL - MySQL, Event & Trigger
ยท
๐Ÿงฉ SQL
โœ… Event & TriggerEventMySQL์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ŠฅDatabase๊ฐ€ ํ•ด์•ผ ํ•  ์ž‘์—…๋“ค์„ ์Šค์ผ€์ค„๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.ex) ํŠน์ • ์กฐ๊ฑด์— ํ•ด๋‹น๋˜๋Š” row๋“ค์„ ๋งค์ฃผ ์ˆ˜์š”์ผ ์˜คํ›„ 3์‹œ์— ์‚ญ์ œํ•œ๋‹ค. PostgreSQL์—์„œ๋„ ์ง€์›ํ•˜์ง€๋งŒ ํ™•์žฅํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.SQLite์—์„œ๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. TriggerDatabase์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์— ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.ex) ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ row๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ์ „์— ๊ทธ ์‚ญ์ œ์— ๋Œ€ํ•œ log๋ฅผ log ํ…Œ์ด๋ธ”์— ๋งŒ๋“ ๋‹ค. MySQL, PostgreSQL, SQLite ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฐ์ดํ„ฐ ์—†์ด ๊ตฌ์กฐ๋งŒ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๋ฒ•CREATE TABLE archived_movies LIKE movies; โœ… Event• ๊ด€๋ฆฌโ–ซ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋ ค๋ฉด: ‎`SHOW..
SQL - MySQL, UNION
ยท
๐Ÿงฉ SQL
โœ… Union์ด๋ž€?์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ๋ฐฉ๋ฒ•Union๊ณผ Join์˜ ์ฐจ์ด์ Join์œผ๋กœ ํ…Œ์ด๋ธ”์„ ํ•ฉ์น˜๋ฉด ๋” ๋งŽ์€ column์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค. (์ˆ˜ํ‰์ ์œผ๋กœ ํ…Œ์ด๋ธ” ํ™•์žฅ)Union์€ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ง์ ์œผ๋กœ ํ™•์žฅํ•œ๋‹ค. ์กฐ๊ฑด: ํ•ฉ์น˜๋Š” ํ…Œ์ด๋ธ”์€ ์„œ๋กœ ๊ฐ™์€ ์ˆ˜์˜ column์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.(๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต๋œ ๊ฐ’์€ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ง„๋‹ค.) ex)SELECT 'hello'UNIONSELECT 'hi'UNIONSELECT 'hello'; UNION ALLํ•˜์ง€๋งŒ UNION์ด ์•„๋‹Œ UNION ALL์„ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๋ณต์ด ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.๊ทธ๋ฆฌ๊ณ  UNION ALL์€ ์ค‘๋ณต ์ฒดํฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— UNION๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์ข‹๋‹ค.SELECT 'hello'UNION ALLSELECT 'hi'UNION ALLSELECT 'hello';..
SQL - MySQL, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๊ทœํ™”, Foreign Key, JOIN
ยท
๐Ÿงฉ SQL
โœ… ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๊ทœํ™”๋ž€? (Normalization)๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ์ค„์ด๊ณ , ๊ตฌ์กฐ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ์„ค๊ณ„ ๋ฐฉ๋ฒ• โ‘  ์ œ1์ •๊ทœํ˜• (1NF)์ปฌ๋Ÿผ์€ ์›์ž๊ฐ’(Atomic)๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค โ‘ก ์ œ2์ •๊ทœํ˜• (2NF)๋ถ€๋ถ„ ํ•จ์ˆ˜ ์ข…์† ์ œ๊ฑฐ โ‘ข ์ œ3์ •๊ทœํ˜• (3NF)์ดํ–‰์  ์ข…์† ์ œ๊ฑฐ โœ… Foreign Key๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ Primary Key๋ฅผ ์ฐธ์กฐํ•˜๋Š” Column CREATE TABLE dogs ( dog_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, weight DECIMAL(5, 2), date_of_birth DATE, owner_id BIGINT UNSIGNED, breed_id B..
SQL - MySQL, ๋ฌธ๋ฒ•
ยท
๐Ÿงฉ SQL
โœ… ALTERALTER TABLE ๋ช…๋ น์–ด๋Š” ๊ฝค ๋น„์šฉ์ด ํด ์ˆ˜ ์žˆ๋‹ค.(row์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑ๋œ column์˜ ๋ชจ๋“  row์— ๊ธฐ๋ณธ๊ฐ’์„ ์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ)SQLite์—์„œ๋„ ALTER๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Table ์ด๋ฆ„ ๋ณ€๊ฒฝ, Column ์ด๋ฆ„ ๋ณ€๊ฒฝ, Column ์ถ”๊ฐ€๋งŒ ๊ฐ€๋Šฅํ•จ(์ด๋ฏธ ์„ค์ •๋œ column์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ ํ˜น์€ ์‚ญ์ œํ•˜๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅ) ALTER TABLE users DROP COLUMN profile_picture;profile_picture column ์‚ญ์ œ ALTER TABLE usersCHANGE COLUMN bio about_me TINYTEXT;bio -> about_me ์ด๋ฆ„ ๋ณ€๊ฒฝ, data type๋ณ€๊ฒฝ CHANGEALTER TABLE us..
SQL - MySQL Data Types
ยท
๐Ÿงฉ SQL
โœ… Data TypesCHAR(10): ๊ธธ์ด๊ฐ€ 10์ด ๋  ๋•Œ๊นŒ์ง€ ๊ณต๋ฐฑ์„ ๋„ฃ์–ด ์ฑ„์šด๋‹ค. (CHAR๋Š” 255๊ฐ€ ์ตœ๋Œ€ ๊ธธ์ด)VARCHAR(10): ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 10 ENUM('male', 'female'): ์ง€์ •ํ•œ ๊ฐ’๋“ค ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฐ’์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ SET('1', '2', '3'): ์ง€์ •ํ•œ ๊ฐ’์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๊ฐ’์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ TINYTEXT: 255 ์ดํ•˜TEXT: 65,535 ์ดํ•˜MEDIUMTEXT: 16MB ์ดํ•˜LONGTEXT: 4GB ์ดํ•˜ TINYBLOB: 255Byte ์ดํ•˜BLOB: 64KB ์ดํ•˜MEDIUMBLOB: 16MB ์ดํ•˜LONGBLOB: 4GB ์ดํ•˜ TINYINT: SIGNED -> -128 to 127 | UNSIGNED -> 0 to 255SMALLINT: SIGNED -> -32,7..
SQL - MySQL Setup
ยท
๐Ÿงฉ SQL
โœ… MySQL๋ž€?MySQL• ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (RDBMS)• ํ˜„์žฌ **Oracle**์ด ๊ด€๋ฆฌ MariaDB• MySQL์—์„œ ๊ฐˆ๋ผ์ ธ ๋‚˜์˜จ DB (fork)• MySQL ์› ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค DB โœ… MySQL ์„ค์น˜homebrew๋กœ ์„ค์น˜1. mysql ์„ค์น˜brew install mysql 2. ๋งฅ๋ถ ๋ถ€ํŒ… ์‹œ mysql์„ ์ž๋™์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ‘ ๋ช…๋ น์–ด ์ž…๋ ฅbrew services start mysql 3. ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ‘ ๋ช…๋ น์–ด ์ž…๋ ฅmysql.server start 4. ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ • ๋“ฑ ๊ฐ„๋‹จํ•œ ์„ค์ • ๋ช…๋ น์–ดmysql_secure_installation 5. ๋กœ๊ทธ์ธ ๋ช…๋ น์–ดmysql -u root -p 6. ์‚ฌ์šฉ์ž ์ ‘์† ์ข…๋ฃŒexit 7. mysql ์„œ๋ฒ„ ์ข…๋ฃŒmysql.server..
SQL - SQLite Index
ยท
๐Ÿงฉ SQL
โœ… Index ๊ตฌ์กฐ(B+ Tree)B+Tree๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋“ฑ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ ํ‚ค์— ์˜ํ•ด์„œ ๊ฐ๊ฐ ์‹๋ณ„๋˜๋Š” ๋ ˆ์ฝ”๋“œ์˜ ํšจ์œจ์ ์ธ ์‚ฝ์ž…, ๊ฒ€์ƒ‰๊ณผ ์‚ญ์ œ๋ฅผ ํ†ตํ•ด ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…์ž…๋‹ˆ๋‹ค. SQLite์™€ MySQL ์ž์ฒด๋„ B+ Tree๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ๋ฐ์ดํ„ฐ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ(leaf)์—๋งŒ ์ €์žฅํ•˜๊ณ , ๋‚ด๋ถ€ ๋…ธ๋“œ๋Š” ํƒ์ƒ‰๋งŒ ๋‹ด๋‹นํ•˜๋Š” ๊ตฌ์กฐ index๋Š” inserting, deleting, editing์„ ๋ชจ๋‘ ๋А๋ฆฌ๊ฒŒ ๋งŒ๋“ ๋‹ค. (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋™๊ธฐํ™”๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ)๋ณ€๊ฒฝ์ด ์žฆ์€ ์—ด์ด ์žˆ๋‹ค๋ฉด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. rowidSQLite๋Š” ๊ธฐ๋ณธ ์ œ๊ณต, Primary key๋ฅผ ๋ช…์‹œ์ ์œผ..
SQL - SQLite, ๋ฌธ๋ฒ•
ยท
๐Ÿงฉ SQL
โœ… SQLite๋ž€?SQLite๋Š”**์„œ๋ฒ„ ์—†์ด ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDBMS)**์ด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์ด ๋”ฐ๋กœ ์žˆ์ง€๋งŒ, SQLite๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์— ํฌํ•จ๋˜๋Š” embedded database๋‹ค. SQLite ํ•ต์‹ฌ ํŠน์ง•1. ์„œ๋ฒ„๊ฐ€ ์—†๋‹ค.2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ทธ๋ƒฅ ํŒŒ์ผ์ด๋‹ค.3. ๋งค์šฐ ๊ฐ€๋ณ๋‹ค. โœ… ์„ค์น˜(macOS ๊ธฐ์ค€)brew install sqlite macOS์— ๊ธฐ๋ณธ ์„ค์น˜๋˜์–ด ์žˆ๋Š” sqlite๋ง๊ณ  homebrew๋กœ ์„ค์น˜ํ•œ sqlite๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ‘์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์„œ ์„ค์ •ํŒŒ์ผ์„ ์—ด๊ณ ,code ~/.zshrc ํŒŒ์ผ ๋งจ ๋ฐ‘์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.# SQLite (Homebrew)export PATH="/opt/homebrew/opt/sqlite..
SQL - SQL์ด๋ž€?
ยท
๐Ÿงฉ SQL
โœ… SQL์ด๋ž€?SQL(Structured Query Language)SQL์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํŠน์ˆ˜ ๋ชฉ์ ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค.๋งŽ์€ ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด SQL์„ ํ‘œ์ค€์œผ๋กœ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋‹ค.DDL (Data Definition Language): ๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ดDDL์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑ, ์ˆ˜์ • ๋ฐ ์‚ญ์ œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” SQL ๋ช…๋ น ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.DML (Data Manipulation Language): ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์–ธ์–ดDML(๋ฐ์ดํ„ฐ ์กฐ์ž‘ ์–ธ์–ด)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€(์‚ฝ์ž…), ์‚ญ์ œ, ์ˆ˜์ •(์—…๋ฐ์ดํŠธ)ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.TCL (Transaction Control Language): ..