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
的数据
表 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'
对比以上两张图,可以验证在更新某一列完成时,触发器自动在更新的这一行添加时间戳。