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)

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

相关推荐
li35748 小时前
深入理解:MQ监听类 vs Spring事件监听类 —— 区别、用法与适用场景全解析
java·数据库·spring
安然~~~8 小时前
mysql的索引
数据库·mysql
GBASE9 小时前
GBASE南大通用技术分享:GBase 8s数据库典型安装(命令行方式)
数据库
康惠桀9 小时前
Oracle UNDO表空间监控指南
数据库·oracle
SeaTunnel9 小时前
实测有效|用 SeaTunnel 免费实现 MySQL→Oracle 实时同步,步骤超细
数据库·mysql·oracle·开源·seatunnel·数据同步·连接器
Mr.朱鹏9 小时前
ShardingJDBC实战指南
java·jvm·数据库·spring·分库分表·shardingjdbc·shardingshere
咔咔一顿操作9 小时前
MySQL 事务管理与锁机制:解决并发场景下的数据一致性问题
java·数据库·mysql
麦兜*9 小时前
MongoDB 备份与恢复终极指南:mongodump 和 mongorestore 深度实战
java·数据库·spring boot·mongodb·spring
xhbh66610 小时前
MySQL数据导出避坑指南:如何选择正确的工具并设计安全的备份策略?
数据库·mysql·oracle·程序员·mysql导出数据库
幻奏岚音10 小时前
《数据库系统概论》第一章 初识数据库
数据库·算法·oracle