MySQL --触发器详解

2019-08-24  本文已影响0人  叫我胖虎大人

触发器的特性


触发器的应用场景

需要在某个表发生更改时自动处理。

例如:

触发器是MySQL响应以下任意语句而
自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语
句):
 DELETE;
 INSERT;
 UPDATE。


查看触发器

删除触发器

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
参考书籍:<<MySQL必知必会>>

上一篇 下一篇

猜你喜欢

热点阅读