MySQL触发器详解(定义作用及种类实例)

MySQL触发器详解(定义作用及种类实例)-mikechen

MySQL触发器定义

触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程。

 

MySQL触发器作用

触发器主要用于监视某个表的insert、update以及delete等更新操作,这些操作可以分别激活该表的insert、update或者delete类型的触发程序运行,从而实现数据的自动维护。

 

MySQL触发器使用场景

  • 可以通过数据库中的相关表实现级联更改;
  • 实时监控表中字段的更改做出相应处理;

 

MySQL触发器创建

语句:

CREATE TRIGGER <触发器名> <触发时机 BEFORE | AFTER>

<触发事件 INSERT | UPDATE | DELETE >
ON <表名> FOR EACH Row <触发器主体>

END;
  • trigger_name:触发器的名称;
  • tirgger_time:触发时机,为BEFORE或者AFTER;
  • trigger_event:触发事件,为INSERT、DELETE或者UPDATE;
  • tb_name:表示建立触发器的表明,就是在哪张表上建立触发器;
  • trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句;

 

MySQL触发器种类

MySQL的触发事件有三种:

1.insert

将新记录插入表时激活触发程序,例如通过:insert、load data和replace语句,可以激活触发程序运行。

2.update

更改某一行记录时激活触发程序,例如通过update语句,可以激活触发程序运行。

3.delete

从表中删除某一行记录时激活触发程序,例如通过delete和replace语句,可以激活触发程序运行。

 

触发器的触发时间有两种:

before:表示在触发事件发生之前执行触发程序;

after: 表示在触发事件发生之后执行触发器。

 

因此严格意义上讲一个数据库表,最多可以设置六种类型的触发器:

  1. Before Insert
  2. After Insert
  3. Before Update
  4. After Update
  5. Before Delete
  6. After Delete

 

MySQL触发器示例

create database if not exists mydb01_trigger;

use mydb01_trigger;

-- 用户表

create table if not exists user(
 uid int primary key auto_increment,
 username varchar(50) not null,
 password varchar(50) not null
)default charset=utf8;

-- 用户信息操作日志表
create table if not exists user_logs(
 id int primary key auto_increment,
 time timestamp,
 log_text varchar(100)
 )default charset=utf8;
 
-- 需求1:当user表添加一行数据,则会自动在user_log添加日志记录
-- 定义触发器: trigger_test1
create trigger trigger_test1 after insert on user for each row
insert into user_logs values(NULL,now(),'new');

-- 在user表添加数据,让触发器自动执行
insert into user values(2,'zbb','123456');

 

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法