10-----创建触发器
一、创建触发器

# 插入前 CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW BEGIN ... END # 插入后 CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW BEGIN ... END # 删除前 CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW BEGIN ... END # 删除后 CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW BEGIN ... END # 更新前 CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW BEGIN ... END # 更新后 CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW BEGIN ... END
例子:用户和日志表。每次创建一个用户之后,就在日志布表中生成这条记录
# 创建用户表 create table user( id int primary key auto_increment, name varchar(20) not null, reg_time datetime, # 注册用户的时间 affirm enum('yes','no') # no表示该用户执行失败 ); #创建日志表 create table userLog( id int primary key auto_increment, u_name varchar(20) not null, u_reg_time datetime # 注册用户的时间 ); # 创建触发器 delimiter 默认情况下,delimiter是分号 触发器名称应遵循命名约定[trigger time]_[table name]_[trigger event] delimiter // create trigger after_user_insert after insert on user for each row begin if new.affirm = 'yes' then insert into userLog(u_name,u_reg_time) values(new.name,new.reg_time); end if; end // delimiter ; #往用户表中插入记录,触发触发器,根据if的条件决定是否插入数据 insert into user(name,reg_time,affirm) values ('张三',now(),'yes'),('李四',now(),'yes'),('王五',now(),'no'); # 查看日志表,发现多了两条记录 ,大家应该看到for each row就明白了 mysql> select * from userlog; +----+--------+---------------------+ | id | u_name | u_reg_time | +----+--------+---------------------+ | 1 | 张三 | 2018-06-14 17:52:49 | | 2 | 李四 | 2018-06-14 17:52:49 | +----+--------+---------------------+ rows in set (0.00 sec)
注意:请注意,在为INSERT定义的触发器中,可以仅使用NEW
关键字。不能使用OLD
关键字。但是,在为DELETE
定义的触发器中,没有新行,因此您只能使用OLD
关键字。在UPDATE触发器中,OLD
是指更新前的行,而NEW
是更新后的行。
二、使用触发器
触发器无法由用户直接调用,而知由于对表的【增/删/改】操作被动引发的。
三、删除触发器
drop trigger trigger_userLog;
本文来自博客园,作者:王竹笙,转载请注明原文链接:https://www.cnblogs.com/edeny/p/9402591.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App