MySQL


๐Ÿชคย DBMS (Database Management System)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด
  • MySQL, SQLite, ORACLE, mongoDB, redis ๋“ฑ์ด ์ด์— ํ•ด๋‹น
  • ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • SQL (Structured Query Language)

  • ๊ตฌ์กฐ๊ฐ€ ์žˆ๋Š” ์งˆ๋ฌธ์šฉ ์–ธ์–ด
  • SELECT, INSERT, UPDATE, DELETE ๊ฐ™์€ ๊ตฌ๋ฌธ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค.
  • ๋‹ค์ˆ˜์˜ DBMS๊ฐ€ SQL ๋ฐฉ์‹์„ ๋”ฐ๋ฅธ๋‹ค.
  • ๊ด€๊ณ„ํ˜• (SQL, RDBMS)

  • RDBMS๋Š” ํ…Œ์ด๋ธ”๋กœ ๊ตฌ์„ฑ์ด ๋œ๋‹ค.
  • ํ…Œ์ด๋ธ”์ด ๋จผ์ € ๊ตฌ์„ฑ๋˜๊ณ  ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ์— ๋งž์ถ”์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
  • ๊ตฌ์กฐํ™”๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋˜์–ด ์žˆ์–ด ์˜ˆ์™ธ๊ฐ€ ์—†๋‹ค.
  • ์‹ ๋ขฐ์„ฑ์ด ๋งค์šฐ ๋†’๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์ž…, ์ถœ๋ ฅ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • DB์˜ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด ๋งค์šฐ ์–ด๋ ต๋‹ค.
  • ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๋น…๋ฐ์ดํ„ฐ ๋“ฑ์—๋Š” ์‚ฌ์šฉ์ด ์–ด๋ ต๋‹ค.
  • ๋น„๊ด€๊ณ„ํ˜• (NoSQL, Non RDBMS)

  • SQL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  DB
  • ๋ฌธ์„œํ˜•, ๊ทธ๋ž˜ํ”„ํ˜•, ํ‚ค๋ฐธ๋ฅ˜ํ˜•, ์™€์ด๋”” ์ปฌ๋Ÿผํ˜• ๋“ฑ์ด ์žˆ๋‹ค.
  • ํŠน์ • ๋ชฉ์ ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
  • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ํšจ์œจ์ ์ด๋‹ค.
  • DB์˜ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด ์‰ฝ๊ณ , ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค.
  • ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ํฌ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ถ€ ์ฝ์–ด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์†๋„๊ฐ€ ์ €ํ•˜๋œ๋‹ค.
  • ๐Ÿ›นย SELECT

  • DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„ ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ฌธ
  • ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

  • SELECT ์ปฌ๋Ÿผ๋ช… FROM table
  • ํ•„์š”ํ•œ ๊ฐ’์„ ์ž„์˜๋กœ ์ถ”๊ฐ€

  • SELECT ์ปฌ๋Ÿผ๋ช…, ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ FROM table
  • WHERE

  • ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” Row๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ
  • SELECT ์ปฌ๋Ÿผ๋ช… FROM table WHERE ์กฐ๊ฑด
  • ORDER BY

  • ์„ ํƒํ•œ ๊ฐ’๋“ค์„ ์ •๋ ฌํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
  • SELECT ์ปฌ๋Ÿผ FROM table ORDER BY ์ •๋ ฌํ•  ์ปฌ๋Ÿผ๋ช…
  • LIMIT

  • Row์˜ ์ˆ˜๋ฅผ ์ง€์ •ํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
  • SELECT ์ปฌ๋Ÿผ๋ช… FROM table LIMIT ์ˆซ์ž;
  • AS

  • Column ๋ช…์„ ๋ณ€๊ฒฝํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
  • ์›๋ž˜์˜ table์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ
  • SELECT ์ปฌ๋Ÿผ๋ช… AS ๋ฐ”๊ฟ€ ์ปฌ๋Ÿผ๋ช… , ์ปฌ๋Ÿผ๋ช…2 AS ๋ฐ”๊ฟ€ ์ปฌ๋Ÿผ๋ช…2 FROM table ;
  • JOIN

  • ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์˜ ๊ฐ’์„ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
  • SELECT ์ปฌ๋Ÿผ๋ช… FROM table1 JOIN table2 ON ์กฐ๊ฑด;
  • ๐Ÿ‰ย ์ •๊ทœํ™”

  • DB์„ค๊ณ„์— ์žˆ์–ด์„œ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ณผ์ •
  • ํฌ๊ณ  ์กฐ์งํ™”๋˜์ง€ ์•Š์€ ํ…Œ์ด๋ธ”์„ ์ž‘๊ณ  ์ž˜ ์กฐ์ง๋œ ํ…Œ์ด๋ธ”๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ •๊ทœํ™”๊ฐ€ ์ž˜ ๋˜์–ด์žˆ์–ด์•ผ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ ์‹œ์— ์ด์ƒ ํ˜„์ƒ์„ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ œ 1 ์ •๊ทœํ˜•

  • ์ œ 1 ์ •๊ทœํ™”๊ฐ€ ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ
  • ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ์€ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ์†์„ฑ๋งŒ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ๋ฒ•์น™
  • ์ œ 2 ์ •๊ทœํ˜•

  • ๋ชจ๋“  ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ๋ถ€๋ถ„ ์ข…์†์ด ์—†์–ด์•ผ ํ•œ๋‹ค.
  • ์ œ 3 ์ •๊ทœํ˜•

  • ์ดํ–‰ ์ข…์†์„ฑ(A = B, B = C ์—ฌ์„œ A = C์ธ ๊ฒฝ์šฐ)์ด ์—†์–ด์•ผ ํ•œ๋‹ค.
  • ์ผ๋ฐ˜ ์ปฌ๋Ÿผ์—๋งŒ ์ข…์†๋œ ์ปฌ๋Ÿผ์€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋กœ ๋นผ๊ธฐ
  • ์ถœ์‹ ๋Œ€ํ•™์€ ๊ฐ•์‚ฌ์˜ ์ถœ์‹ ๋Œ€ํ•™์ด๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๋‹ค๋ฃจ์–ด์ค€๋‹ค.
  • ์™ธ๋ž˜ ํ‚ค (Foreign Key)

  • ๊ธฐ๋ณธํ‚ค(Primary Key): ๊ฐ๊ฐ์˜ Row๊ฐ€ ๊ณ ์œ ํ•˜๊ฒŒ ๊ฐ€์ง€๋Š” ๊ฐ’
  • ์ •๊ทœํ™”๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ํ…Œ์ด๋ธ”์€ ์ตœ์†Œํ•œ์˜ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ง€๊ฒŒ ๋œ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ ๋“ค์ผ ๋•Œ๋Š” ํ•œ๊บผ๋ฒˆ์— ๋งŽ์€ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ํ…Œ์ด๋ธ”์„ JOINํ•ด์„œ ๊ฐ€์ง€๊ณ  ์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
  • ์•ž์„œ ๋ฐฐ์šด JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์„ ํ•ฉ์น˜๋Š”๋ฐ ๊ธฐ์ค€์ด ๋˜๋Š” ๊ฐ’์„ ํ†ตํ•ด์„œ ํ…Œ์ด๋ธ”์„ ํ•ฉ์ณ์ค€๋‹ค. ์ด๋•Œ ๊ธฐ์ค€์ด ๋˜๋Š” ๊ฐ’์ด ์™ธ๋ž˜ ํ‚ค์ด๋‹ค.
  • ๐Ÿช€ย DB ๋งŒ๋“ค๊ธฐ

    DB ์ƒ์„ฑ

  • CREATE SCHEMA `mydb` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  • TABLE ์ƒ์„ฑ

  • ๋Œ€๋ฌธ์ž ์‚ฌ์šฉ
  • ๋‹จ์–ด์™€ ๋‹จ์–ด ์‚ฌ์ด _๋กœ ๊ตฌ๋ถ„
  • ์ปฌ๋Ÿผ๋ช…์„ ๋ณด๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฆ„ ์ง“๊ธฐ
  • Primary Key ์—ญํ• ์„ ํ•˜๋Š” ๋‹จ์–ด๊ฐ€ ์ตœ์šฐ์„ ์œผ๋กœ ์˜ค๋„๋ก ํ•œ๋‹ค.
  • Primary Key ์ปฌ๋Ÿผ์€ ๋’ค์— _PK๋ฅผ ์ถ”๊ฐ€
  • Foreign Key ์ปฌ๋Ÿผ์€ ๋’ค์— _FK๋ฅผ ์ถ”๊ฐ€
  • ์ œ์•ฝ ๋„ฃ๊ธฐ
  • CREATE TABLE user (
    `ID_PK` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `NAME` VARCHAR(100) NOT NULL,
    `EMAIL` VARCHAR(100) UNIQUE NOT NULL,
    `PASSWORD` VARCHAR(100) NOT NULL,
    `ADDRESS` VARCHAR(100) NOT NULL,
    `AGE` TINYINT UNSIGNED,
    `MEMBERSHIP` TINYINT DEFAULT 0,
    `REGISTER_TIME` DATETIME DEFAULT CURRENT_TIMESTAMP,
    `UPDATE_TIME` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    );
  • ์—ฌ๊ธฐ์„œ VARCHAR ์•ˆ ์ˆซ์ž๋Š” ์˜์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค. ํ•œ๊ธ€์€ 50๊ธ€์ž๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์˜์–ด: 2byte, ํ•œ๊ธ€: 4byte์ด๊ธฐ ๋•Œ๋ฌธ
  • DATA ์‚ฝ์ž…

    INSERT INTO user (NAME, EMAIL, PASSWORD, ADDRESS, AGE)
    VALUES ('์žฅ๊ฒฝ์€', 'j56237@naver.com', '1234', '์„œ์šธ ์˜๋“ฑํฌ๊ตฌ', '27');
  • ์•„์ด๋””๋Š” AUTO_INREMENT ์˜ต์…˜์— ๋”ฐ๋ผ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ์‚ฝ์ž…๋˜์ง€๋งŒ ์‹œ๋„ํ–ˆ๋‹ค๊ฐ€ ์‹คํŒจํ•œ ๊ฒฝ์šฐ์—๋„ 1์ด ์˜ฌ๋ผ๊ฐ„๋‹ค.
  • DATA ์ˆ˜์ • ๋ฐ ์‚ญ์ œ

  • ID_PK๊ฐ€ 3์ธ ๊ฐ’ ์‚ญ์ œ
  • DELETE FROM user WHERE ID_PK = 3;
  • ID_PK๊ฐ€ 1์ธ ๊ฐ’์˜ AGE ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ 1 ์ฆ๊ฐ€
  • UPDATE user SET AGE = AGE + 1 WHERE ID_PK = 1;
  • ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ๋ช… ๋ณ€๊ฒฝ
  • ALTER TABLE test_table CHANGE COLUMN NAME EMAIL VARCHAR(100);

    โ†’ test_table์˜ NAME ์ปฌ๋Ÿผ์„ EMAIL(VARCHAR100)๋กœ ๋ณ€๊ฒฝ

  • ์ปฌ๋Ÿผ ์ถ”๊ฐ€
  • ALTER TABLE test_table ADD COLUMN ADDRESS VARCHAR(100) AFTER EMAIL;

    โ†’ ADDRESS ์ปฌ๋Ÿผ ์ถ”๊ฐ€

  • ์ปฌ๋Ÿผ ์‚ญ์ œ
  • ALTER TABLE test_table DROP ADDRESS;

    โ†’ ADDRESS ์ปฌ๋Ÿผ ์‚ญ์ œ