[Database] ํธ๋ฆฌ๊ฑฐ(Trigger)
ํธ๋ฆฌ๊ฑฐ(Trigger)
ํธ๋ฆฌ๊ฑฐ(Trigger)๋ ์ด์ ๋ฐฉ์์ ๋ฅผ ๋ปํ๋ค. ์ด์ ๋ฐฉ์์ ๋ฅผ ๋น๊ธฐ๋ฉด ์ด์์ด ๋ฐ์ฌ๋๋ ์ผ๋ จ์ ๊ณผ์ ์ด ์๋ ๊ฒ์ฒ๋ผ Database์์์ ํธ๋ฆฌ๊ฑฐ๋ ์ด๋ ํน์ ๋์์ ๋ฐ์ํด์ ์๋์ ์ผ๋ก ํ์ํ ๋์์ด ์คํ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์์ ํธ๋ฆฌ๊ฑฐ์ ์๋ฏธ๋ ์๋์ ๊ฐ๋ค.
ํธ๋ฆฌ๊ฑฐ(Trigger): ์ด๋ค ํธ๋์ญ์ ์ด ์ผ์ด๋๋ฉด ๊ฑฐ๊ธฐ์ ๋ฐ์ํด์ ๋ค๋ฅธ ๋ช ๋ น์ ์คํํ๊ฒ ํ๋ ๊ธฐ๋ฅ
ํธ๋ฆฌ๊ฑฐ๊ฐ ์คํ๋๋ ๊ฒฝ์ฐ
๋ ์์ธํ ์๊ธฐํ์๋ฉด, ํธ๋ฆฌ๊ฑฐ๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ(INSERT, DELETE, UPDATE) ๋ฌธ์ด ์คํ ๋ ๋ ์๋์ผ๋ก ์คํ๋๋ ํ๋ก์์ ๋ฅผ ๋งํ๋ค.
๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ฌธ
- INSERT
- DELETE
- UPDATE
ํธ๋ฆฌ๊ฑฐ๊ฐ ์คํ๋๋ ์์
๋ณดํต ํธ๋ฆฌ๊ฑฐ๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ๋ฌธ์ด ์ฒ๋ฆฌ๋๋ ์ธ ๊ฐ์ง ์์ (์คํ ์ , ๋์ ํ์ฌ, ์คํ ํ)์ ๋์ํ๋ค. ์ด๋, DBMS ์ ์กฐ์ฌ์ ๋ฐ๋ผ ํธ๋ฆฌ๊ฑฐ๋ ์ ์๊ฐ ๋ง์ด ๋ฌ๋ผ์ง ์ ์๋ค.
- ์คํ ์ (BEFORE)
- ๋์ ํ์ฌ (INSTEAD OF)
- ์คํ ํ(AFTER)
ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์
๋ณดํต ํธ๋ฆฌ๊ฑฐ๋ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ(์ฝ์ , ์ญ์ , ์์ )์ด ์ผ์ด๋ ๋ ๋ถ์์ ์ผ๋ก ํ์ํ ์์ ์ธ ๋ฐ์ดํฐ์ ๊ธฐ๋ณธ๊ฐ ์ ๊ณต, ๋ฐ์ดํฐ ์ ์ฝ ์ค์, sql ๋ทฐ์ ์์ , ์ฐธ์กฐ๋ฌด๊ฒฐ์ฑ ์์ ๋ฑ์ ์ํํ๋ค.
์๋ฅผ ๋ค์ด, Book ํ ์ด๋ธ์ ์๋ก์ด ๋์๋ฅผ ์ฝ์ ํ ๋, ์ฝ์ ๋ ๋ด์ฉ์ ๋ฐฑ์ ํ๊ธฐ ์ํด ๋ค๋ฅธ ํ ์ด๋ธ Book_log์ ์ฝ์ ๋ ๋ด์ฉ์ ๊ธฐ๋ก๊ฐ๋ค๊ณ ํ ๋, Book ํ ์ด๋ธ์ INSERT๋ฌธ์ ์ํํ๋ฉด์ ํธ๋ฆฌ๊ฑฐ๋ก ๊ฐ์ด ์คํ๋๋ค๋ฉด ์ฌ์ฉ์์ ์ฅ์์๋ ํธํ๊ณ , ๋ณด์์์ผ๋ก๋ ์ข๋ค.
์ด ๊ฒฝ์ฐ์ ๋ํด์ ์ค์ต์ ์งํํ๋ฉด ์๋์ ๊ฐ๋ค.
์ค์ต
๐กํธ๋ฆฌ๊ฑฐ ์๋์ ํ์ฉ
SET gobal log_bin_trust_function_creators=ON;
- Book_log ํ ์ด๋ธ ์์ฑ
CREATE TABLE Book_log (
bookid_l INTEGER,
bookname_l VARCHAR(40),
publisher_l VARCHAR(40),
price_l INTEGER
);
- ํธ๋ฆฌ๊ฑฐ ์์ฑ
delimiter //
CREATE TRIGGER AfterInsertBook
AFTER INSERT ON Book FOR EACH ROW
BEGIN
DECLARE average INTEGER;
INSERT INTO Book_log VALUES(new.bookid, new.bookname, new.publisher, new.price);
END;
//
delimiter
ํธ๋ฆฌ๊ฑฐ ์ ์๋ฌธ์ CREATE TRIGGER - BEGIN - END ํ์์ด๋ค.
CREATE TRIGGER [ํธ๋ฆฌ๊ฑฐ๋ช ] : ํธ๋ฆฌ๊ฑฐ ์ ์ธ
AFTER INSERT ON [ํ ์ด๋ธ๋ช ] FOR EACH ROW : ํ ์ด๋ธ์ INSERT๋ฌธ์ด ์คํ๋๋ฉด ์๋์ผ๋ก ์คํ๋จ
BEGIN~END: Book์ ์ฝ์ ๋ ํฌํ์ ๋ค์ Book_log ํ ์ด๋ธ์ ์ ์ฅํ๋ INSERT๋ฌธ์ ์คํ
๋ฉด์ ์์ ์ง๋ฌธ
๐กํธ๋ฆฌ๊ฑฐ์ ํ๋ก์์ ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
ํ๋ก์์ ๋ ์ฌ์ฉ์๊ฐ ๋ฏธ๋ฆฌ ๋ช ๋ น์ด๋ฅผ ์ ์ฅํด์, ์ฌ์ฉ์๊ฐ ์คํํ๋ฉด ์คํ์ด ๋์ง๋ง, ํธ๋ฆฌ๊ฑฐ๋ ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋๋ฉด, ์๋์ผ๋ก ์ ์ฅ๋์๋ ๋ช ๋ น์ด ์คํ๋ฉ๋๋ค.
Reference
https://github.com/devSquad-study/2023-CS-Study/blob/main/DB/db_trigger.md
2023-CS-Study/DB/db_trigger.md at main · devSquad-study/2023-CS-Study
์ ์ ๊ฐ๋ฐ์ ๋ฉด์ ๋๋น CS ์คํฐ๋ ๐จ๐ป๐ป๐ฉ๐ป๐ป ๐ฅ. Contribute to devSquad-study/2023-CS-Study development by creating an account on GitHub.
github.com