首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

MySQL 觸發器實戰:同步郵箱用戶表至論壇資料庫

     編輯:更多程式設計知識

需求: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 // 變更分隔符,避免觸發器內部 ; 過早結束。
  • 論壇表其他欄位設定預設值,觸發器僅同步三欄位。

優缺點

替代方案

  • 應用層雙寫 (需修改原始碼)。
  • 資料庫複製 (Replication) + 篩選。
  • 訊息佇列 (Binlog 解析 -> Canal/Maxwell -> 消費者同步)。

觸發器適合舊系統無法修改程式碼、資料量中小、強一致性要求場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
優點缺點
資料庫層面自動同步,應用程式無感跨資料庫觸發器效能影響寫入延遲
無需修改應用程式碼 (ExtMail 為 Perl)觸發器邏輯隱蔽,除錯困難
保證強一致性 (同一交易)資料庫遷移/備份需同步處理觸發器