DELIMITER $$ USE `xtzx`$$ DROP TRIGGER /*!50032 IF EXISTS */ `sync_user_insert`$$ CREATE /*!50017 DEFINER = 'root'@'%' */ TRIGGER `sync_user_insert` BEFORE INSERT ON `tbl_user_info` FOR EACH ROW BEGIN SET @ver = (SELECT VERSION FROM zf_cnc_conference.userinfo WHERE username=new.MobileNum); SET @new_version=(SELECT IFNULL(@ver,0)) ; INSERT INTO zf_cnc_conference.userinfo (organizerID, username, email, mobile, telephone, createDate, sipName, sipNum, sipPwd, VERSION ) VALUES ( new.organizerID, new.MobileNum, '', new.MobileNum, new.MobileNum, new.CreateTime, new.sipName, new.sipNum, new.sipPwd, @new_version ); INSERT INTO zf_cnc_conference.account ( userID, NAME, PASSWORD, accountType ) VALUES ( (SELECT MAX(userInfoId) FROM zf_cnc_conference.userinfo WHERE 1=1), new.MobileNum, new.Password, 'WEB' ); INSERT INTO zf_cnc_conference.userinfo_has_role (userInfoId, roleCode ) VALUES( (SELECT MAX(userInfoId) FROM zf_cnc_conference.userinfo WHERE 1=1 ) , '200001' ); END; $$ DELIMITER ;
基本语法:
Create trigger 触发器名 before|after 触发事件 On 表名 for each row 执行语句
CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt
trigger_time:触发动作时间,可以是BEFORE或AFTER,以指明触发程序是在激活它的语句之前或之后触发。BEFORE update能否取到new.字段值?BEFORE AFTER使用时的区别?
Before与After区别:before:(insert、update)可以对new进行修改,after不能对new进行修改。两者都不能修改old数据。
在本表插入字段值需要用new计算,只能用before,在别的表中记录插入成功记录或统计插入的条数用after。
trigger_event:激活触发程序的语句类型。
INSERT:将新行插入表时激活触发程序,如INSERT、LOAD DATA和REPLACE语句。
UPDATE:更改某一行时激活触发程序,如UPDATE语句。
DELETE:从表中删除某一行时激活触发程序,如DELETE和REPLACE语句
trigger_stmt:触发程序激活时执行的语句。如果你打算执行多个语句,可使用BEGIN ... END复合语句结构。
还有就是在触发器中使用变量
set @t_id=new.id; set @t_id=old.id;
new可以或则到你新添加进来的数据 old其实也可以 但是在old只可以在update中使用