Searching...
2014年2月25日 星期二

MySQL Trigger

一樣又是娘子提醒的~
mssql中有觸發程序可以使用(當資料表A發生哪些變動時,連帶地會自動去進行資料表B的變動)
所以mysql應該也會有....

大概查了一下設定,除了在ndbcluster下有點奇特外,其他都正常
這邊主要是漫遊中心學校名稱變動的trigger

設定在NDB_23 radius.school的trigger,觸發動作為 After、Update

BEGIN
UPDATE `wordpress`.`unit`
SET `wordpress`.`unit`.`name`=new.`sname`
WHERE `wordpress`.`unit`.`schoolid`=new.`id`;

UPDATE `wordpress`.`roaming_count_copy`
SET `wordpress`.`roaming_count_copy`.`unitname`=new.`sname`
WHERE `wordpress`.`roaming_count_copy`.`schoolid`=new.`id`;

UPDATE `wordpress`.`roaming_success_count`
SET `wordpress`.`roaming_success_count`.`unitname`=new.`sname`
WHERE `wordpress`.`roaming_success_count`.`schoolid`=new.`id`;
END


設定在NDB_22 radius.school的trigger,觸發動作為 After、Update

BEGIN
UPDATE `radius`.`proxy`
SET `radius`.`proxy`.`unitname`=new.`sname`
WHERE `radius`.`proxy`.`schoolid`=new.`id`;

UPDATE `radius`.`radtest`
SET `radius`.`radtest`.`schoolname`=new.`sname`
WHERE `radius`.`radtest`.`schoolid`=new.`id`;
END


要說詭異的地方為原本都將trigger放到NDB_23中,在Navicat mysql軟體測試都正常會觸發
但是透過網頁進行的時候卻發生屬於ndbcluster架構的proxy、radtest不會被更新???????
查看了一下grants的權限也都正常啊.....

mysql> show grants for radius@192.168.55.31;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for radius@192.168.55.31 |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'radius'@'192.168.55.31' IDENTIFIED BY PASSWORD '*2551450E5D464579317C5AF0F047F7B765A33754' |
| GRANT ALL PRIVILEGES ON `wordpress`.* TO 'radius'@'192.168.55.31' |
| GRANT ALL PRIVILEGES ON `radius`.* TO 'radius'@'192.168.55.31' |
+-------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

所以只好把這部分移到NDB_22去,就正常了....詭異...

1 意見:

  1. trigger真的省掉很多網頁程式碼的篇幅...蠻讚的~

    回覆刪除