‡๐Ÿ‘ฉ‍๐Ÿ’ป ‡/ºDatabase

[Database] ํŠธ๋ฆฌ๊ฑฐ(Trigger)

Trudy | ์†ก์—ฐ 2024. 8. 16. 00:59

ํŠธ๋ฆฌ๊ฑฐ(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