1 前面写了 procedure,function,还有一个trigger,这里开始记录
2 trigger能干什么:
类似于,java操作,当执行了某个操作了,消息通知,程序方式触发执行另外一个关联的操作
那在mysql中,也有同样的操作行为,这里定义的就是触发器
2 它的语法:
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END
3 有个触发器的概念,是由触发时机(before/after)和触发事件(insert/update/delete)组合,出现了6种触发器类型
4 示例,在插入user时,写一条日志记录
CREATE TABLE `logs` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`log` VARCHAR(255) DEFAULT NULL COMMENT '日志说明',
PRIMARY KEY (`Id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='日志表';
-- 创建触发器
DELIMITER $
CREATE TRIGGER user_log AFTER INSERT ON users FOR EACH ROW
BEGIN
DECLARE s1 VARCHAR(40)CHARACTER SET utf8;
DECLARE s2 VARCHAR(20) CHARACTER SET utf8; -- 后面发现中文字符编码出现乱码,这里设置字符集
SET s2 = " is created";
SET s1 = CONCAT(New.username,s2); -- 这里注意使用到了New 用来获取当前插入的user信息字段值
INSERT INTO LOGS(LOG) VALUES(s1);
END $
DELIMITER ;
mysql触发器 的过渡变量:(NEW | OLD . column_name)
NEW . column_name"或者"OLD . column_name".
对于INSERT语句,只有NEW是合法的;
对于DELETE语句,只有OLD才合法;
而UPDATE语句可以在和NEW以及OLD同时使用;