๐Ÿฆญ DML & TRANSACTION

๋‚˜๋‚˜'s Brainยท2024๋…„ 7์›” 8์ผ

MariaDB

๋ชฉ๋ก ๋ณด๊ธฐ
8/15
post-thumbnail

๐Ÿ“ DML (Data Manipulation Language)

๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ธ์–ด, ํ…Œ์ด๋ธ”์— ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š”) SQL์˜ ํ•œ ๋ถ€๋ถ„์ด๋‹ค.

๐Ÿ”– INSERT

์ƒˆ๋กœ์šด ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ตฌ๋ฌธ์ด๋ฉฐ, ํ…Œ์ด๋ธ”์˜ ํ–‰์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.

INSERT 
  INTO tbl_menu
VALUES 
(
  NULL, '๋ฐ”๋‚˜๋‚˜ํ•ด์žฅ๊ตญ'
, 8500, 4
, 'Y'
);

โžก๏ธ MULTI INSERT

INSERT 
  INTO tbl_menu 
VALUES 
(null, '์ฐธ์น˜๋ง›์•„์ด์Šคํฌ๋ฆผ', 1700, 12, 'Y'),
(null, '๋ฉธ์น˜๋ง›์•„์ด์Šคํฌ๋ฆผ', 1500, 11, 'Y'),
(null, '์†Œ์‹œ์ง€๋ง›์ปคํ”ผ', 2500, 8, 'Y');

๐Ÿ”– UPDATE

ํ…Œ์ด๋ธ”์— ๊ธฐ๋ก๋œ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋Š” ๊ตฌ๋ฌธ์ด๋ฉฐ, ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ํ–‰ ๊ฐฏ์ˆ˜๋Š” ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค.

SELECT
       menu_code
     , category_code
  FROM tbl_menu
 WHERE menu_name = 'ํŒŒ์ธ์• ํ”Œํƒ•';

โžก๏ธ SUBQUERY๋ฅผ ํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๋‹ค๋งŒ MySQL์€ Oracle๊ณผ ๋‹ฌ๋ฆฌ update๋‚˜ delete ์‹œ ์ž๊ธฐ ์ž์‹  ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ ์‹œ 1093 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

   UPDATE tbl_menu
      SET category_code = 6
    WHERE menu_code = (SELECT menu_code
                         FROM tbl_menu 
                        WHERE menu_name = 'ํŒŒ์ธ์• ํ”Œํƒ•');

๐Ÿ”– DELETE

ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ์‚ญ์ œํ•˜๋Š” ๊ตฌ๋ฌธ์ด๋ฉฐ, ํ…Œ์ด๋ธ”์˜ ํ–‰์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ค„์–ด๋“ ๋‹ค.

โžก๏ธ LIMIT์„ ํ™œ์šฉํ•œ ํ–‰ ์‚ญ์ œ(offset ์ง€์ •์€ ์•ˆ๋จ)

    DELETE FROM tbl_menu
    ORDER BY menu_price
    LIMIT 2;

โžก๏ธ WHERE์ ˆ์„ ํ™œ์šฉํ•œ ๋‹จ์ผ ํ–‰ ์‚ญ์ œ

    DELETE
      FROM tbl_menu
     WHERE menu_code = 24;

โžก๏ธ ํ•ด๋‹น ํ…Œ์ด๋ธ” ์ „์ฒด ํ–‰ ์‚ญ์ œ

    DELETE FROM tbl_menu;
    
    -- (๊ฒฝ๊ณ ๋ฌธ๊ตฌ๋ฅผ ์•ˆ ๋„์šฐ๊ณ  ์‹ถ๋‹ค๋ฉด)
    DELETE FROM tbl_menu WHERE 1 = 1;

๐Ÿ”– REPLACE

INSERT ์‹œ PRIMARY KEY ๋˜๋Š” UNIQUE KEY๊ฐ€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด
REPLACE๋ฅผ ํ†ตํ•ด ์ค‘๋ณต ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.

-- INSERT INTO tbl_menu VALUES (17, '์ฐธ๊ธฐ๋ฆ„์†Œ์ฃผ', 5000, 10, 'Y'); -- ์—๋Ÿฌ ๋ฐœ์ƒ
REPLACE INTO tbl_menu VALUES (17, '์ฐธ๊ธฐ๋ฆ„์†Œ์ฃผ', 5000, 10, 'Y');

โžก๏ธ INTO๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ ํ•˜๋‹ค.

    REPLACE tbl_menu VALUES (17, '์ฐธ๊ธฐ๋ฆ„์†Œ์ฃผ', 6500, 10, 'Y');

โžก๏ธ UPDATE ์‹œ WHERE ๊ตฌ๋ฌธ ์—†์ด UPDATE๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿšจ DML ์ž‘์—…์ด ๋๋‚˜๋ฉด db_script๋ฅผ ๋‹ค์‹œ ์ „์ฒด ์‹คํ–‰ํ•ด์„œ ํ…Œ์ด๋ธ” ๋ฐ ๋ฐ์ดํ„ฐ ์ •๋ณด๋ฅผ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.



๐Ÿ“ TRANSACTION

๐Ÿ’ก TRANSACTION์€ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์—์„œ ํ•œ ๋ฒˆ์— ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„์ด๋‹ค.

์‹œ์ž‘, ์ง„ํ–‰, ์ข…๋ฃŒ ๋‹จ๊ณ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋งŒ์•ฝ ์ค‘๊ฐ„์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋กค๋ฐฑ(์‹œ์ž‘ ์ด์ „ ๋‹จ๊ณ„๋กœ ๋˜๋Œ๋ฆฌ๋Š” ์ž‘์—…)์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ œ๋Œ€๋กœ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปค๋ฐ‹(์ดํ›„ ๋กค๋ฐฑ์ด ๋˜์ง€ ์•Š์Œ)์„ ์ง„ํ–‰ํ•œ๋‹ค.

MySQL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋™ ์ปค๋ฐ‹ ์„ค์ •์ด ๋˜์–ด ์žˆ์–ด(๋กค๋ฐฑ์ด ์•ˆ๋จ). ๋กค๋ฐฑ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๋™ ์ปค๋ฐ‹ ์„ค์ •์„ ํ•ด์ œํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ”– Transaction ํ™œ์šฉ

MySQL์€ ๊ธฐ๋ณธ์ ์œผ๋กœ commit์ด ์ž๋™์œผ๋กœ ๋˜๋ฏ€๋กœ ์ˆ˜๋™์œผ๋กœ ์กฐ์ ˆํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด autocommit ์„ค์ •์„ ๋ฐ”๊ฟ” ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

โžก๏ธ autocommit ํ™œ์„ฑํ™”

    SET autocommit = 1; 
    -- ๋˜๋Š” 
    SET autocommit = ON;

โžก๏ธ autocommit ๋น„ํ™œ์„ฑํ™”

    SET autocommit = 0; 
    -- ๋˜๋Š” 
    SET autocommit = OFF;

START TRANSACTION ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•˜๊ณ  DML ์ž‘์—… ์ˆ˜ํ–‰ ํ›„ COMMIT ๋˜๋Š” ROLLBACK์„ ํ•˜๋ฉด ๋œ๋‹ค.
COMMIT ์ดํ›„์—๋Š” ROLLBACK์„ ํ•ด๋„ ROLLBACK์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

    START TRANSACTION;
    
    SELECT * FROM tbl_menu;
    INSERT INTO tbl_menu VALUES (null, '๋ฐ”๋‚˜๋‚˜ํ•ด์žฅ๊ตญ', 8500, 4, 'Y');
    UPDATE tbl_menu SET menu_name = '์ˆ˜์ •๋œ ๋ฉ”๋‰ด' WHERE menu_code = 5;
    DELETE FROM tbl_menu WHERE menu_code = 7;
    
    -- COMMIT; 
    ROLLBACK;

์‹คํ–‰๊ฒฐ๊ณผ

profile
"๋กœ์ปฌ์—์„  ๋ฌธ์ œ์—†์—ˆ๋Š”๋ฐโ€ฆ?"

0๊ฐœ์˜ ๋Œ“๊ธ€