Mysql高级——触发器

前边我们学习了mysql的存储过程和函数。本文来介绍一下mysql触发器的使用。

一、什么是触发器

触发器是指鱼鳔有关的数据库对象,在insert/update/delete之前或之后,触发并执行触发器中编写的sql语句集合。
触发器的这种特性可以协助数据库端确保数据的完整性,日志记录,数据校验等操作。
使用别名OLD或者NEW来引用触发器中发生变化的数据内容,比如:插入数据时记录日志,NEW代表插入数据的内容。MYSQL只支持,行级别触发器。

触发器类型 NEW和OLD的使用
insert new表示新增的数据
update old表示旧的数据,new表示修改后的数据
delete old表示删除的数据

二、触发器的书写格式

语法结构:

create TRIGGER trigger_name
-- 触发器执行时机  与 触发器类型
before/after insert/update/delete 
-- 触发器对应的表
on table_name

for each row 

BEGIN
		-- 触发器sql
end;

三、触发器的应用

下面我们做一个触发器,有一张部门表:需要在插入数据的时候记录一条日志,日志内容为插入数据内容。
Mysql高级——触发器_第1张图片
首先创建一张日志表:

CREATE TABLE `dep_op_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `op_type` varchar(10) DEFAULT NULL COMMENT '操作类型',
  `op_time` datetime DEFAULT NULL COMMENT '操作时间',
  `op_desc` varchar(255) DEFAULT NULL COMMENT '操作内容',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建触发器:

create TRIGGER insert_dep_trigger
-- 插入之后
after insert

on department
-- 行级别触发器
for each row 

BEGIN
		insert into dep_op_log(id,op_type,op_time,op_desc) values (null,'insert',now(),concat('新数据:id=',new.id,'name=',new.department_name));
end;

创建成功后,插入一条部门数据:

INSERT INTO `department` VALUES (null, '产品部');

查看结果:
Mysql高级——触发器_第2张图片
没问题的。
update/与delete触发器与insert大同小异,update要注意的是,保存日志内容可以选择 OLD和NEW,delete只可以选择OLD。

四、删除和查看触发器

-- 删除触发器
DROP TRIGGER IF EXISTS `insert_dep_trigger`;
--查看触发器  表格内容信息等
SHOW TRIGGERs;

你可能感兴趣的:(mysql,触发器)