๐ก ํธ๋ฆฌ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์์ ๋ฐ์ํ๋
ํน์ ์ด๋ฒคํธ(INSERT, UPDATE, DELETE)๊ฐ ๋ฐ์ํ์ ๋ ์๋์ผ๋ก ์คํ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด์ด๋ค.์ฃผ์ ์ฌ์ฉ
๋ชฉ์ ์ ๋ฐ์ดํฐ์๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ณ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํจ์ด๋ค.๋ค๋ง ํธ๋ฆฌ๊ฑฐ๋ฅผ ๋จ์ฉํ ์ ์ฑ๋ฅ ๋ฌธ์ ๋ ๋ณต์ก์ฑ ์ฆ๊ฐ์ ๊ฐ์ ๋ถ์ ์ ์ธ ์ํฅ์ ์ค ์ ์๋ค.
โ
ํธ๋ฆฌ๊ฑฐ์ ์ข
๋ฅ
BEFORE ํธ๋ฆฌ๊ฑฐ
: ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ์คํ๋๋ฉฐ ๋ฐ์ดํฐ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ ๋ณํ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
AFTER ํธ๋ฆฌ๊ฑฐ
: ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ํ์ ์คํ๋๋ฉฐ ๋ก๊น
, ์๋ฆผ ์ ์ก ๋ฑ์ ์์
์ ์ ํฉํ๋ค.
โ ํธ๋ฆฌ๊ฑฐ ์์ฑ๋ฒ
DELIMITER //
CREATE OR REPLACE TRIGGER [ํธ๋ฆฌ๊ฑฐ๋ช
]
BEFORE|AFTER [์ด๋ฒคํธ ํ์
]
ON [ํ
์ด๋ธ๋ช
]
FOR EACH ROW
BEGIN
END//
DELIMITER ;
โ ์ฃผ๋ฌธ ๋ฉ๋ด(tbl_order_menu) ํ ์ด๋ธ์ INSERT๊ฐ ๋๊ณ ๋์ ์ฃผ๋ฌธ(tbl_order) ํ ์ด๋ธ์ ์ด ํฉ๊ณ๊ฐ UPDATE ๋ ์ ์๋ ํธ๋ฆฌ๊ฑฐ ์์ฑ
DELIMITER //
CREATE OR REPLACE TRIGGER after_order_menu_insert
AFTER INSERT
ON tbl_order_menu
FOR EACH ROW
BEGIN
UPDATE tbl_order
SET total_order_price = total_order_price + NEW.order_amount * (SELECT menu_price FROM tbl_menu WHERE menu_code = NEW.menu_code)
WHERE order_code = NEW.order_code;
END//
DELIMITER ;
โ ์ฃผ๋ฌธ ํ ์ด๋ธ๊ณผ ์ฃผ๋ฌธ ๋ฉ๋ด ํ ์ด๋ธ์ INSERT ์์ ์ดํ ์ฃผ๋ฌธ ํ ์ด๋ธ์ ์ด ํฉ๊ณ๊ฐ UPDATE ๋๋ ๊ฒ ํ์ธ
-- ์ฃผ๋ฌธ ํ
์ด๋ธ INSERT
INSERT
INTO tbl_order
(
order_code
, order_date
, order_time
, total_order_price
)
VALUES
(
NULL
, CONCAT(CAST(YEAR(NOW()) AS VARCHAR(4))
, CAST(LPAD(MONTH(NOW()), 2, 0) AS VARCHAR(2))
, CAST(LPAD(DAY(NOW()), 2, 0) AS VARCHAR(2)))
, CONCAT(CAST(LPAD(HOUR(NOW()), 2, 0) AS VARCHAR(2))
, CAST(LPAD(MINUTE(NOW()), 2, 0) AS VARCHAR(2))
, CAST(LPAD(SECOND(NOW()), 2, 0) AS VARCHAR(2)))
, 0
);
-- ์ฃผ๋ฌธ ๋ฉ๋ด ํ
์ด๋ธ INSERT 1
INSERT
INTO tbl_order_menu
(
order_code
, menu_code
, order_amount
)
VALUES
(
1
, 3
, 2
);
-- ์ฃผ๋ฌธ ๋ฉ๋ด ํ
์ด๋ธ INSERT 2
INSERT
INTO tbl_order_menu
(
order_code
, menu_code
, order_amount
)
VALUES
(
1
, 6
, 3
);
SELECT * FROM tbl_order;
SELECT * FROM tbl_order_menu;
-- ๋ค์ ๋๋๋ ค ํ
์คํธ ํด๋ณด๊ณ ์ ํ ๊ฒฝ์ฐ
-- 1) rollbackํ๊ธฐ
ROLLBACK;
-- 2) ๊ธฐ์กด ๋ฐ์ดํฐ ์ง์ฐ๊ธฐ
DELETE FROM tbl_order WHERE 1 = 1;
DELETE FROM tbl_order_menu WHERE 1 = 1;
-- ์ดํ AUTO_INCREMENT๋ ๋ค์ ์ด๊ธฐํ ํด ์ค๋ค.
ALTER TABLE tbl_order AUTO_INCREMENT = 1;