mysql的触发器和oracle的类似,都是针对具体的三种情况(insert、delete、update)做after或者before处理,里面可以再写if等语句。
另外就是new.和old. 这个注意一下insert情况下没有old.的说。
mysql对触发器官方中文介绍:http://dev.mysql.com/doc/refman/5.1/zh/triggers.html
我用了这个很简单的例子来学习:http://www.cnblogs.com/nicholas_f/archive/2009/09/22/1572050.html
我用了phpmyadmin 3.0+来写触发器:
CREATE TRIGGER t_afterdelete_on_tab1
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
delete from tab2 where tab2_id=old.tab1_id;
END;但是每次都报错:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delete from tab2 where tab2_id=old.tab1_id' at line 5
然后,见到了delimiter这个命令,试着写成这样(注意,这么写是没错的,但是在phpmyadmin的sql窗口中不行,在mysql内或者用php执行的时候是没问题的):
DROP TRIGGER IF EXISTS `sgtest`.`t_afterdelete_on_tab1`;
DELIMITER //
CREATE TRIGGER `sgtest`.`t_afterdelete_on_tab1` AFTER DELETE ON `sgtest`.`tab1`
FOR EACH ROW BEGIN
delete from tab2 where tab2_id=old.tab1_id;
END
//
DELIMITER ;
问题依旧…
经过一番折腾,原来一直忽略了一个地方,或者从来没注意过:
其实我只要写成:
CREATE TRIGGER t_afterdelete_on_tab1
AFTER DELETE ON tab1
FOR EACH ROW
BEGIN
delete from tab2 where tab2_id=old.tab1_id;
END;//再在sql执行框的下方delimiter里面写 // 就ok了。
另外,phpmyadmin查看触发器是在对应表的“结构”选项卡中,在索引的下方: