SQL Server教程:触发器 trigger
一、trigger的介绍#
触发器是特殊的存储过程,它在特定的数据库活动发生时自动执行。
触发器可以与特定表上的 INSERT
、 DELETE
、 UPDATE
操作(或组合)相关联。
💡 一般来说,约束的处理比触发器快,若能通过约束解决则优先考虑约束,而不是触发器
二、trigger的创建#
2-1 异表#
❤ 实验目的:利用trigger,将插入表 student
的数据,同步插入到表 student_copy
中
前提条件: 已经创建表 student
和 表 student_copy
,且两张表的数据类型一样
❤ trigger创建
USE [event_db]
GO
/****** Object: Trigger [dbo].[student_trigger] Script Date: 2022-12-20 12:49:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [dbo].[student_trigger]
ON [dbo].[student]
AFTER INSERT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
-- 定义变量
declare @id int
declare @name nchar(10)
declare @age int
select @id=id, @name=name, @age=age from inserted
insert into [dbo].[student_copy](id, name, age) values(@id, @name, @age)
END
❤ 表student
插入数据
USE [event_db]
GO
INSERT INTO [dbo].[student]
([id]
,[name]
,[age])
VALUES
(1001
,'韩信'
,50)
GO
❤ 查看表 student
和 student_copy
的数据
2-2 同表#
需求:update操作完成后,自动添加操作时间
未创建触发器之前:select oid,o_status,o_time from tUser where oid='50E4BCEC-004B-445D-852D-0004B181B28D'
创建触发器命令:
create trigger trigger_o_time ON tUser
after update
AS
begin
update tUser set o_time = GETDATE()
from tUser t
INNER JOIN Inserted i on t.oid = i.oid
end
更新指定行 o_status
命令:update tUser set o_status=1 where oid='50E4BCEC-004B-445D-852D-0004B181B28D'
查询指定行命令,验证结果:select oid,o_status,o_time from tUser where oid='50E4BCEC-004B-445D-852D-0004B181B28D'
对比以上两张图,可以验证在更新某一列完成时,触发器自动在更新的这一行添加时间戳。
三、参考来源#
作者:caojun97
出处:https://www.cnblogs.com/caojun97/p/16994087.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现