MySQL 触发器

目录

一、触发器概述

二、触发器操作

1、创建触发器

2、查看触发器

3、删除触发器

三、触发器应用


一、触发器概述

MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由时间来触发某个操作,这些时间包括INSERT、UPDATE和DELETE语句。如果定义了触发程序,当数据执行这些语句的时候就会激发触发器执行相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。

触发器(trigger)是一个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句调用,也不需要手工启动,只要当一个预定义ide事件发生的时候,就会被MySQL自动调用。

触发器也可以查询其他表,而且可以包含复杂的SQL语句,它们主要用于满足复杂的业务规则或要求。

触发程序优点:

1)触发程序的执行过程是自动的。当触发程序相关表的数据做出相应的修改后立即执行。

2)触发程序可以通过数据库中相关的表进行层叠修改另表的表。

3)触发程序可以实现实施比FOREIGN KEY约束,CHECK约束更为复杂的检查和操作。

二、触发器操作

1、创建触发器

语法

sql 复制代码
create trigger 触发器名 触发时机<before|after> 触发事件<insert|update|delete>
on 表名 for each row 
begin
触发器程序体
end

2、查看触发器

语法1

sql 复制代码
show triggers;

语法2

sql 复制代码
select * from INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME='触发器名' \G

3、删除触发器

语法

sql 复制代码
drop trigger [数据库名.]触发器名

三、触发器应用

例如基于此素材

sql 复制代码
mysql> create table student(
    -> id int auto_increment primary key,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> insert into student(name) values ('xiaoming'),('xiaogang');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from student;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
+----+----------+
1 row in set (0.00 sec)

mysql> select * from student_total;
+-------+
| total |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)

1、创建插入触发器,在student表中插入数据,然后studen_total表中自动加一。

sql 复制代码
mysql> delimiter $$
mysql> create trigger student_insert_trigger after insert
    -> on student for each row
    -> begin
    -> update student_total set total=total+1;
    -> end$$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

2、创建一个删除触发器,在student表中删除数据,然后student_total表的total自动减一。

sql 复制代码
mysql> delimiter $$
mysql> create trigger student_delete_trigger after delete
    -> on student for each row
    -> begin
    -> update student_total set total=total-1;
    -> end$$
Query OK, 0 rows affected (0.02 sec)

mysql> delimiter ;

3、 创建一个更新触发器,在t1表中修改name字段,在t2表自动修改name。

sql 复制代码
mysql> create table t1(
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> create table t2(
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 values ('zhangsan'),('lisi');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into t2 values ('zhangsan'),('lisi');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+----------+
| name     |
+----------+
| zhangsan |
| lisi     |
+----------+
2 rows in set (0.00 sec)

mysql> select * from t2;
+----------+
| name     |
+----------+
| zhangsan |
| lisi     |
+----------+
2 rows in set (0.00 sec)

触发器

sql 复制代码
mysql> delimiter $$
mysql> create trigger t1_after_uptate_trigger after update
    -> on t1 for each row
    -> begin 
    -> update t2 set name=new.name where name=old.name;
    -> end $$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

查看结果

sql 复制代码
mysql> update t1 set name='zhangsanfeng' where name='zhangsan';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from t2;
+--------------+
| name         |
+--------------+
| zhangsanfeng |
| lisi         |
+--------------+
2 rows in set (0.00 sec)

mysql> select * from t1;
+--------------+
| name         |
+--------------+
| zhangsanfeng |
| lisi         |
+--------------+
2 rows in set (0.00 sec)

更多应用需要看实际需求 。

相关推荐
叁沐3 分钟前
MySQL 08 详解read view:事务到底是隔离的还是不隔离的?
mysql
周胡杰20 分钟前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj00123 分钟前
navicate如何设置数据库引擎
数据库·mysql
ladymorgana24 分钟前
【Spring Boot】HikariCP 连接池 YAML 配置详解
spring boot·后端·mysql·连接池·hikaricp
赵渝强老师26 分钟前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头28 分钟前
Oracle注释详解
数据库·oracle
御控工业物联网1 小时前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
GJCTYU2 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
Code季风2 小时前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql