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中使用