需求:ExtMail 郵箱系統用戶變更 (增/改/刪) 自動同步至論壇 (Xiuno BBS) 用戶表。使用 MySQL 觸發器在 extmail.mailbox 表操作時觸發,維護 xiuno_bbs.bbs_user 表。
extmail.mailbox 欄位 name(用戶名), password, username(Email)。xiuno_bbs.bbs_user 欄位 username, password, email。
USE extmail;
DELIMITER //
CREATE TRIGGER add_bbsuser
AFTER INSERT ON extmail.mailbox
FOR EACH ROW
BEGIN
INSERT INTO xiuno_bbs.bbs_user(username, password, email)
VALUES (NEW.name, NEW.password, NEW.username);
END //
DELIMITER ;
USE extmail;
DELIMITER //
CREATE TRIGGER update_bbsuser
AFTER UPDATE ON extmail.mailbox
FOR EACH ROW
BEGIN
UPDATE xiuno_bbs.bbs_user
SET username = NEW.name, password = NEW.password
WHERE email = NEW.username;
END //
DELIMITER ;
USE extmail;
DELIMITER //
CREATE TRIGGER delete_bbsuser
AFTER DELETE ON extmail.mailbox
FOR EACH ROW
BEGIN
DELETE FROM xiuno_bbs.bbs_user WHERE email = OLD.username;
END //
DELIMITER ;
USE extmail; 必須先切換到觸發源資料庫,否則觸發器建立失敗 (常見坑)。NEW 代表新資料列,OLD 代表舊資料列。DELIMITER // 變更分隔符,避免觸發器內部 ; 過早結束。| 優點 | 缺點 |
|---|---|
| 資料庫層面自動同步,應用程式無感 | 跨資料庫觸發器效能影響寫入延遲 |
| 無需修改應用程式碼 (ExtMail 為 Perl) | 觸發器邏輯隱蔽,除錯困難 |
| 保證強一致性 (同一交易) | 資料庫遷移/備份需同步處理觸發器 |