ํ‚ํ‚์ž‰ 2025. 5. 23. 13:17

DELETE์™€ TRUNCATE์˜ ์ฐจ์ด

DELETE์™€ TRUNCATE๋Š” ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์–ด๋‹ค. ํ•˜์ง€๋งŒ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ํŠน์ง•์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

1. DELETE

  • DELETE FROM ํ…Œ์ด๋ธ”๋ช… WHERE ์กฐ๊ฑด; ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰๋งŒ ์‚ญ์ œํ•œ๋‹ค.
  • ์กฐ๊ฑด์„ ์ƒ๋žตํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ์‚ญ์ œํ•œ๋‹ค.
  • ํ•œ ํ–‰์”ฉ ์‚ญ์ œํ•˜๋ฉฐ, ์‚ญ์ œ๋œ ํ–‰๋งˆ๋‹ค ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ๊ฐ€ ๊ธฐ๋ก๋œ๋‹ค.
  • ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด(Foreign Key Constraint)์ด ๊ฑธ๋ ค ์žˆ์œผ๋ฉด, ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์— ๋”ฐ๋ผ ์‚ญ์ œ๊ฐ€ ์ œํ•œ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋™ ์ฆ๊ฐ€(auto_increment) ๊ฐ’์€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋กค๋ฐฑ(rollback)์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

2. TRUNCATE

  • TRUNCATE TABLE ํ…Œ์ด๋ธ”๋ช…; ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์‚ญ์ œํ•œ๋‹ค. ์กฐ๊ฑด ์ง€์ • ๋ถˆ๊ฐ€.
  • ํ…Œ์ด๋ธ” ๊ตฌ์กฐ์™€ ์ปฌ๋Ÿผ, ์ธ๋ฑ์Šค ๋“ฑ์€ ๊ทธ๋Œ€๋กœ ๋‚จ๋Š”๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ๊ฐ€ ์ตœ์†Œํ™”๋˜์–ด ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์‹œ ๋น ๋ฅด๋‹ค.
  • ์ž๋™ ์ฆ๊ฐ€(auto_increment) ๊ฐ’์ด ์ดˆ๊ธฐํ™”๋œ๋‹ค.
  • ๋กค๋ฐฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค(DBMS๋งˆ๋‹ค ๋‹ค๋ฆ„).
  • ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์ด ๊ฑธ๋ ค ์žˆ์œผ๋ฉด ์‹คํ–‰์ด ์ œํ•œ๋  ์ˆ˜ ์žˆ๋‹ค.

SET FOREIGN_KEY_CHECKS = 0 ์„ค๋ช…

MySQL ๋“ฑ์—์„œ๋Š” ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉด, ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ํ•ด์น˜์ง€ ์•Š๋„๋ก ๋ฐ์ดํ„ฐ ์‚ญ์ œ/์ˆ˜์ •์ด ์ œํ•œ๋œ๋‹ค.
SET FOREIGN_KEY_CHECKS = 0; ๋ช…๋ น์–ด๋Š” ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์„ ์ผ์‹œ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•œ๋‹ค.
์ด ์ƒํƒœ์—์„œ๋Š” ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์— ์ƒ๊ด€์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ž‘์—…์ด ๋๋‚œ ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ SET FOREIGN_KEY_CHECKS = 1;๋กœ ๋‹ค์‹œ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค.


์˜ˆ์ œ1: SQL๋กœ ๋ฐ์ดํ„ฐ ์‚ญ์ œ

์•„๋ž˜๋Š” ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์˜ˆ์ œ๋‹ค.

-- ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ๋น„ํ™œ์„ฑํ™”
SET FOREIGN_KEY_CHECKS = 0;

-- ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์ „์ฒด ์‚ญ์ œ
DELETE FROM child_table;
DELETE FROM parent_table;

-- ๋˜๋Š”
TRUNCATE TABLE child_table;
TRUNCATE TABLE parent_table;

-- ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ๋‹ค์‹œ ํ™œ์„ฑํ™”
SET FOREIGN_KEY_CHECKS = 1;

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹จ, ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์„ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

2. ์ฝ”๋“œ ์˜ˆ์ œ

OrderService.js

// ... ๊ธฐ์กด ์ฝ”๋“œ ...
class OrderService {
  constructor(db) {
    this.db = db; // mysql2/promise ์ปค๋„ฅ์…˜ ํ’€
  }

  async deleteOrder(orderId) {
    const conn = await this.db.getConnection();
    try {
      await conn.beginTransaction();

      // ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ๋น„ํ™œ์„ฑํ™”
      await conn.query('SET FOREIGN_KEY_CHECKS = 0');

      // ํ•˜์œ„ ํ…Œ์ด๋ธ”(์˜ˆ: order_items) ๋จผ์ € ์‚ญ์ œ
      await conn.query('DELETE FROM order_items WHERE order_id = ?', [orderId]);

      // ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์—์„œ ์‚ญ์ œ
      await conn.query('DELETE FROM orders WHERE id = ?', [orderId]);

      // ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด ๋‹ค์‹œ ํ™œ์„ฑํ™”
      await conn.query('SET FOREIGN_KEY_CHECKS = 1');

      await conn.commit();
    } catch (err) {
      await conn.rollback();
      throw err;
    } finally {
      conn.release();
    }
  }
}
// ... ๊ธฐ์กด ์ฝ”๋“œ ...

OrderController.js

// ... ๊ธฐ์กด ์ฝ”๋“œ ...
const express = require('express');
const router = express.Router();
const OrderService = require('./OrderService');
const db = require('../config/db'); // mysql2/promise ์ปค๋„ฅ์…˜ ํ’€

const orderService = new OrderService(db);

router.delete('/orders/:id', async (req, res) => {
  const orderId = req.params.id;
  try {
    await orderService.deleteOrder(orderId);
    res.status(200).json({ message: '์ฃผ๋ฌธ์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.' });
  } catch (err) {
    res.status(500).json({ message: '์ฃผ๋ฌธ ์‚ญ์ œ ์‹คํŒจ', error: err.message });
  }
});

module.exports = router;
// ... ๊ธฐ์กด ์ฝ”๋“œ ...

์ •๋ฆฌ

  • ์„œ๋น„์Šค์—์„œ ํŠธ๋žœ์žญ์…˜๊ณผ ์™ธ๋ž˜ ํ‚ค ์ฒดํฌ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌ
  • ํ•˜์œ„ ํ…Œ์ด๋ธ” โ†’ ์ƒ์œ„ ํ…Œ์ด๋ธ” ์ˆœ์„œ๋กœ ์‚ญ์ œ
  • ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์„œ๋น„์Šค ํ˜ธ์ถœ ํ›„ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
  • ์‹ค๋ฌด์—์„œ๋Š” ์™ธ๋ž˜ ํ‚ค ์ฒดํฌ๋ฅผ ์ž์ฃผ ๋„์ง€ ์•Š์œผ๋‹ˆ, ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ