โโon update cascade ๊ธฐ๋ฅ trigger๋ก ๊ตฌํํ๊ธฐโโ
์ค๋ผํด๊ณผ MS-SQL์ FK ์ ์ฝ์ ๊ฑธ๋ ON DELETE CASCADE ๋ฅผ ์ง์ํ์ง๋ง, ON UPDATE CASCADE๋ MS-SQL ๋ง ์ง์ํ๋ค.
์ค๋ผํด์์๋ ON UPDATE CASCADE๊ฐ ๋ง์ด ํ์ ํ๊ธฐ์ ์กฐ๊ธ ๋ถํธํ์ง๋ง Trigger๋ฅผ ์ด์ฉํด ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
ํธ๋ฆฌ๊ฑฐ ํน์ง
- AFTER, BEFORE๋ฅผ ํตํด TRIGGER๊ฐ ์ธ์ ์คํ๋ ์ง ๊ฒฐ์
- FOR EACH ROW, ์ฆ ๋ชจ๋ ํ ์ด๋ธ์ ๋ฐ๋ณตํ๋ฉด์ ์คํ๋๋ค
- BEGIN๊ณผ END ์ฌ์ด์ SQL๋ฌธ ์ฝ์ ๊ฐ๋ฅ, ์ด๋ ๋ฐ๋์ ; ๋ก ๋์ ๋ด์ฃผ์ด์ผ ํ๋ค!!
CREATE TRIGGER ํธ๋ฆฌ๊ฑฐ๋ช
AFTER UPDATE OF ๋ถ๋ชจํ ์ด๋ธ์ PK ์ปฌ๋ผ๋ช ON ๋ถ๋ชจํ ์ด๋ธ๋ช FOR EACH ROW
BEGIN
UPDATE ์์ํ ์ด๋ธ๋ช
SET ๋ถ๋ชจ์ PK๋ฅผ FK๋ก ์ฐ๋ ์์ํ ์ด๋ธ์ ์ปฌ๋ผ๋ช = :NEW.๋ถ๋ชจํ ์ด๋ธ์ PK ์ปฌ๋ผ๋ช
WHERE ๋ถ๋ชจ์ PK๋ฅผ FK๋ก ์ฐ๋ ์์ํ ์ด๋ธ์ ์ปฌ๋ผ๋ช =:OLD.๋ถ๋ชจํ ์ด๋ธ์ PK ์ปฌ๋ผ๋ช ;
END;
์์)
์ผ๊ธฐ ํ ์ด๋ธ์ dauthor ๊ฐ ๋ฉค๋ฒ ํ ์ด๋ธ์ memid๋ฅผ ์ธ๋ ์ฐธ์กฐํ๋ค.
CREATE TRIGGER dauthor_update
AFTER UPDATE OF memid ON member FOR EACH ROW
BEGIN
UPDATE diary
SET dauthor = :NEW.memid
WHERE dauthor =:OLD.memid;
END;
PARENT ํ ์ด๋ธ์ด UPDATE๋ ๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์๋ ์ํค๊ณ ,
PARENT ํ ์ด๋ธ์ NAME ์ปฌ๋ผ์ FK๋ก ๋ฌผ๊ณ ์๋ CHILD ํ ์ด๋ธ์ PARENT_NAME ์ ์๋ก์ด ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝํด๋ผ..
๋๊ธ