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)

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

相关推荐
编程大师哥1 分钟前
SQL 调优 全面解析
数据库·sql·oracle
Dwzun2 分钟前
基于SpringBoot+Vue的农产品销售系统【附源码+文档+部署视频+讲解)
数据库·vue.js·spring boot·后端·毕业设计
IndulgeCui13 分钟前
【金仓数据库征文】KingbaseES-问题小记之min_wal_size outside
数据库
柯南二号21 分钟前
【后端】【Java】一文详解Spring Boot 统一日志与链路追踪实践
java·开发语言·数据库
2201_7578308721 分钟前
DQL查询语句
数据库
JIngJaneIL33 分钟前
基于Java+ vueOA工程项目管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
鱼找水需要时间38 分钟前
国产银河麒麟系统安装mongodb副本集
数据库·mongodb
Logic1011 小时前
《数据库运维》 郭文明 实验5 数据库性能监视与优化实验核心操作与思路解析
运维·数据库·sql·mysql·计算机网络技术·形考作业·国家开放大学
你真的可爱呀1 小时前
4.前后端联调(Vue3+Vite + Express + MySQL)
mysql·node.js·vue·express
刺客xs1 小时前
Qt ---- Qt6.5.3 连接MySQL数据库
数据库·qt·mysql