标签:应用 大小 日志 必须 value src arc innodb begin
需要在某个表发生更改时自动处理。
例如:
触发器是MySQL响应以下任意语句而
自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语
句):
? DELETE;
? INSERT;
? UPDATE。
show triggers
DROP TRIGGER [trigger_name]
触发器不能更新或覆盖。为了修改一个触发器,必须先删除它,然后再重新创建。
在创建触发器时,需要给出4条信息:
? 唯一的触发器名;
? 触发器关联的表;
? 触发器应该响应的活动(DELETE、INSERT或UPDATE);
? 触发器何时执行(处理之前或之后)。
通过出发条件和响应活动组合每张表最多可以创建6个触发器
CREATE TRIGGER [trigger_name] [trigger_time] [trigger_event] ON [tb_name] FOR EACH ROW [trigger_stmt]
trigger_name:触发器的名称
tirgger_time:触发时机,为BEFORE或者AFTER
trigger_event:触发事件,为INSERT、DELETE或者UPDATE
tb_name:表示建立触发器的表明,就是在哪张表上建立触发器
trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END
其中,BEGIN与END之间的执行语句列表参数表示需要执行的多个语句,不同语句用分号隔开
示例
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
`add_time` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`(250)) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1;
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='日志表';
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.name,s2); #函数CONCAT可以将字符串连接
INSERT INTO logs(log) values(s1);
END;
效果演示
参考博客:https://www.cnblogs.com/phpper/p/7587031.html
参考书籍:<
标签:应用 大小 日志 必须 value src arc innodb begin
原文地址:https://www.cnblogs.com/panghu98/p/11456867.html