mysql触发器

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

你可能感兴趣的:(mysql,user,delete,mobile,insert,each)