๋ณธ ํฌ์คํ ์ ํ๋ก๊ทธ๋๋จธ์ค ๋ฏธ๋ ๋ฐ๋ธ ์ฝ์ค๋ฅผ ๊ณต๋ถํ๋ฉฐ
ํ์ต์ ๊ธฐ๋กํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์์ฑ๋ ๊ธ์ ๋๋ค.
Trigger
๋ ํน์ ํ
์ด๋ธ์ ๋ ์ฝ๋ ์ถ๊ฐ/ ์ญ์ / ๊ฐฑ์ ์์
์ด
๋ฒ์ด์ง๊ธฐ ์ง์ ์ด๋ ์งํ์ ์ด๋ค ์์
์ ์๋ ์ํ
ํ๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค.
ํธ๋ฆฌ๊ฑฐ
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ์
๋ ฅ, ์์ , ์ญ์ ์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ์ฌ ํ
์ด๋ธ์ ๋ณ๊ฒฝ๋ด์ญ
์ ์ถ์ ํ ์ ์๋ค.
TRIGGER์ฌ์ฉ ์ ์ง์ ํด์ผํ ๊ฒ
TRIGGER๋ ํ
์ด๋ธ์ ๋์์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ๋์ ํ
์ด๋ธ
์ ์ง์ ํ๋ค.
INSERT
, DELETE
, UPDATE
์ค ์ด๋ค ์์
์ด ๋ฐ์ํ ๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ํํ๋์ง ๊ฒฐ์ ํ๋ค.
ํธ๋ฆฌ๊ฑฐ๋ฅผ ์์
์
์ ์ํํด์ผํ๋์ง, ์์
์ดํ
์ ์ํํด์ผํ๋์ง ์ํ ์์ ์ ๊ฒฐ์ ํ๋ค.
ํธ๋ฆฌ๊ฑฐ๊ฐ ์์ฑํ๋ ์์ ํ ์ด๋ธ
ํธ๋ฆฌ๊ฑฐ์๋ INSERT
, DELETE
, UPDATE
์์
์ด ์ํ๋๋ฉด ์์๋ก ์ฌ์ฉ๋๋ ์์คํ
ํ
์ด๋ธ
์ด ์๋ค.
NEW : INSERT
, UPDATE
์์
์ด ์ํ๋๋ฉด ํ
์ด๋ธ์ ๋ค์ด์ฌ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ ๊น ์ ์ฅํ๋ค. ๊ทธ ๋ค, ํ
์ด๋ธ์์ ์
๋ ฅ๊ณผ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ค.
OLD : DELETE
, UPDATE
์์
์ด ์ํ๋๋ฉด ํ
์ด๋ธ์ ์์ ๊ฐ์ด ์ ๊น ์ ์ฅ๋๋ค. ๊ทธ ๋ค, ํ
์ด๋ธ์์ ์
๋ ฅ๊ณผ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ค.
โ ์ฃผ์
๋ค๋ฅธ DBMS์์๋ ๋ทฐ
์ ๋ํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ง์ํ๊ธฐ๋ ํ์ง๋ง
MySQL์์๋ ๋ทฐ์ ๋ํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ง์ํ์ง ์๋๋ค.
CREATE TRIGGER ํธ๋ฆฌ๊ฑฐ์ด๋ฆ
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON ํ
์ด๋ธ์ด๋ฆ
FOR EACH ROW -- ๋ค์์ ๋ ์ฝ๋๊ฐ ๋์์ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ ๋ ์ฝ๋๋ณ ํธ๋ฆฌ๊ฑฐ ํธ์ถ
ํธ๋ฆฌ๊ฑฐ ๋ก์ง;
์์
-- ๋ณ๊ฒฝ์ฌํญ ๋ก๊ทธ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ํ
์ด๋ธ suranNameGenderAudit ์์ฑ.
DROP TABLE IF EXISTS test.suranNameGenderAudit;
CREATE TABLE test.suranNameGenderAudit (
name varchar(16),
gender enum('Male', 'Female'),
modified timestamp
);
-- ํ
์ด๋ธ์ ๋ด์ฉ์ด UPDATE ๋๊ธฐ ์ง์ ์ ์คํ๋๋ ํธ๋ฆฌ๊ฑฐ eforeUpdateSuranNameGender ์์ฑ.
DROP TRIGGER IF EXISTS test.beforeUpdateSuranNameGender;
CREATE TRIGGER test.beforeUpdateSuranNameGender
BEFORE UPDATE ON test.suRan_name_gender
FOR EACH ROW
INSERT INTO test.suranNameGenderAudit
SET name = OLD.name, -- ๋ฐ๋๊ธฐ ์ ์ด๋ฆ
gender = OLD.gender,
modified = NOW();
-- test.suRan_name_genderํ
์ด๋ธ์ ๋ด์ฉ ๋ณ๊ฒฝ
UPDATE test.suRan_name_gender
SET name = 'Benjamin'
WHERE name = 'Ben';
ํธ๋ฆฌ๊ฑฐ
๋ ํ
์ด๋ธ๊ณผ ๊ด๋ จ๋ ์ด๋ฒคํธ(INSERT, DELETE, UPDATE
)์ ๋ฐ์ํด ์๋ ์คํ๋๋ ์์
์ด๋ค.
์ ์ฝ์์ต๋๋ค.