淺談MySQL中的觸發器

來源:互聯網
上載者:User
在很多時候,幹得利索不如想的明白。方案應該根據情境來設計,不是盲目的依靠經驗,當然這也算新經驗!

需求是把公司的幾套公用系統做成通過信箱使用者名和密碼認證,只需記住一對使用者名稱密碼,簡單為上,只允許使用者在ExtMail的web頁面修改密碼!在做論壇認證的時候,由於論壇的複雜性,想到了如下的幾個方案:

通過OAuth2.0做認證,或者自己寫介面,問題是只聽過,沒玩過!

在郵箱修改時,也提交到論壇的資料庫。可惜不會ExtMail的Perl代碼,且修改代碼工作量太大!

先前已經把線上信箱使用者表同步到內網,可以做資料庫複寫,可論壇和郵箱的資料庫欄位有較大出入,還是要改大量代碼!

使用觸發器更新論壇資料庫的使用者表!

在仔細考慮過前面三種辦法之後,在能力範圍內,已經把PHP編寫的論壇認證方式修改成適應郵箱的加鹽認證方式,並測試了匯入信箱使用者名和密碼認證。已經修改過論壇資料庫欄位類型,部分後端代碼!最後一步是自動把信箱資料庫的使用者表變更同步到論壇資料庫的使用者表。

在討論資料庫複寫時,發現還是最後一種觸發器的辦法可行性最好,通過對論壇使用者表的大多數欄位設定預設值,做到只添加修改其中的帳號,密碼和郵件三個欄位即可完成對論壇使用者的操作,下面是根據實際情況編寫的MySQL觸發器!

觸發器添加使用者

  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到要觸發的extmail資料庫中,才能對這個庫的操作做相應的觸發,後來就沒有問題了!我果然是MySQL小白!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.