sql server中的触发器

这篇具有很好参考价值的文章主要介绍了sql server中的触发器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.触发器的定义

2  触发器的分类

3 :  dml触发器的工作原理

4 触发器的应用

1.insert触发器

2.delete触发器

3 update 触发器

 DDL触发器

5.触发器的启用和禁用


1.触发器的定义

触发器其实就是一个特殊的存储过程,这个存储过程呢,不能调用罢了, 而是当数据发生变化的时候才触发了这个过程,;

2  触发器的分类

        1) ,ddl触发器, 针对数据库的更新变化

                主要是以create,drop,alter开头的语句的触发

        2)dml触发器 这个针对表达数据更新

                after |for 触发器(动作完成之后触发)

                        insert 触发器:

                        delete触发器

                        update触发器

        3)登录触发器

 登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。
 

3 :  dml触发器的工作原理

      在dml触发器执行过程中, 会产生两张临时表 inserted and  deleted  在执行完毕后自动释放;

顺序 insert触发器 delete触发器 update触发器
1 执行insert语句,在表中插入数据 执行delete语句,删除数据

执行update语句

,修改数据

2 在临时表inserted中插入新数据的一个副本 在deleteed表中插入删除的数据的副本

a:首先备份要更新的数据,插入到deleted表中

b:备份完成后,将更新数据插入到inserted 表中

3

触发器对数据进行检验, 确定是否会滚或者其他操作 触发器对删除数据检查, 来执行其他操作 插入新的数据

4 触发器的应用

 准备数据

工欲善其事,必先利其器,(准备数据):

create table book (
	bid int primary key  not null ,
	bname varchar(200)  not null , 
	bauther varchar(100)   ,
	bprice decimal(10,2) 
)


insert into book(bid,bname,bprice,bauther)
				values (1,'论语'	,25.6 ,'孔子'),
					   (2,'天龙八部',25.6 ,'金庸') ,
					   (3,'雪山飞狐',32.7 ,'金庸'),
					   (4,'平凡的世',35.8 ,'路遥' ) ,
					   (5,'史记'    ,54.8 ,'司马迁') ,
					   (6,'狂人日记',35.5  ,'鲁迅')	

   创建触发器的格式:

CREATE TRIGGER trigger_name
 
ON table_name
 
[WITH ENCRYPTION]  --给触发器文本加密
 
FOR|after |instead of  [DELETE, INSERT, UPDATE]   ---多加一句after和for 是一个功能, 用一个就好了

AS
 
  T-SQL语句
 
GO

 [WITH ENCRYPTION]  --给触发器文本加密

for 和after   -- 其实就是同一个功能,

instead of  就是执行某个操作之前

1.insert触发器

  创建触发器

--判断数据库中,是否存在这个触发器
IF (object_id('tr_insert_book','tr') is not null) 
    drop trigger tr_insert_book
go
create trigger tr_insert_book
on book
instead of  insert 
as 
begin 
    declare @bid int ;
    select @bid = bid from inserted ;
    insert into books(bid) values(@bid);
    print'插入成功';
end

测试:

insert into book values(8,'鹿鼎记','金庸',60)

结果:

sql server 触发器,数据库,数据库

 2delete触发器

       创建触发器:

        

IF(OBJECT_ID('TR_DELETE_BOOK','TR') IS NOT NULL ) 
        DROP TRIGGER TR_DELETE_BOOK
GO

CREATE trigger TR_DELETE_BOOK
ON BOOK
FOR DELETE 
AS 
BEGIN 
 
    print'数据备份';
    
    if(object_id('book_back','U') is not null ) 
        insert into book_back select * from deleted; 
    else 
        select * into book_back from deleted;
    print '备份完成'
end;
    

测试:

delete from book where bid =1

select * from book_back

sql server 触发器,数据库,数据库

少了bid=1 的数据 

sql server 触发器,数据库,数据库

book_back成功备份;

3 update 触发器

创建触发器

IF(OBJECT_ID('TR_UPDATE_BOOK','TR') IS NOT NULL ) 
        DROP TRIGGER TR_UPDATE_BOOK
GO

CREATE TRIGGER TR_UPDATE_BOOK
ON BOOK 
AFTER UPDATE
AS 
BEGIN 
    waitfor delay '00:00:02'
    select * from book;
END

测试

update book set bname ='金瓶梅' ,bauter='未知',bprice =12345 where bid =8

结果:

sql server 触发器,数据库,数据库

补充:

       update列级更新

需求, 比如book的bid是主键 ,那就不能更改, 我们应该这么办呢?

别急,我们可以用update()函数

IF(OBJECT_ID('TR_UPDATE1_BOOK','TR') IS NOT NULL ) 
        DROP TRIGGER TR_UPDATE1_BOOK
GO

create trigger TR_UPDATE1_BOOK
on book
instead of update
as 
begin 
    if(update(bid))
    begin
        print'主键不能更改!!!!';
        rollback; 
    end 
end 

     测试:

update book set bid =1 


select * from book

sql server 触发器,数据库,数据库

sql server 触发器,数据库,数据库

 DDL触发器

创建触发器

        

IF(OBJECT_ID('TR_drop_BOOK','TR') IS NOT NULL ) 
        DROP TRIGGER TR_drop_BOOK
GO
create trigger TR_drop_BOOK
on database 
instead of DROP_TABLE,ALTER_TABLE
as 
begin 
    print'别想着干坏事!!!!好好工作'
    rollback;
end 

 测试

drop table book

结果

sql server 触发器,数据库,数据库

5.触发器的启用和禁用

dml触发器:

enable |disable trigger triger_name on table_name ;

ddl触发器:

enable | disable trigger triger_name on database;文章来源地址https://www.toymoban.com/news/detail-739700.html

到了这里,关于sql server中的触发器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库触发器

    查看触发器是指查看数据库中已经存在的触发器的定义、状态和语法信息等。MySQL 中查看触发器的方法包括 SHOW TRIGGERS 语句和查询 information_schema 数据库下的 triggers 数据表等。本节将详细介绍这两种查看触发器的方法。 SHOW TRIGGERS语句查看触发器信息 在 MySQL 中,可以通过 S

    2023年04月12日
    浏览(48)
  • MySQL——超详细数据库触发器教程

    目录 一、触发器的概念 二、创建触发器 三、查看触发器 四、删除触发器 总结         在实际开发中往往会碰到这样的情况:         当我们对一个表进行数据操作时,需要同步对其它的表执行相应的操作,正常情况下,如果我们使用sql语句进行更新,将需要执行多

    2024年02月07日
    浏览(68)
  • 数据库原理及应用实验报告-实验10-触发器

     实验题目   实验 10触发器    10.1 实验目的 通过实验使学生加深对数据完整性的理解,学会理解、创建和使用触发器。 10.2 实验内容   (用实验9的Teacher表) (1) 为 Teacher 表建立触发器T1,当插入或使更新表中的数据时,保证所操作的纪录的 Tage 值大于0。 (2) 为 Teacher 表建立

    2024年02月05日
    浏览(56)
  • 五、C#与数据库交互(数据存储过程与触发器)

    在C#中与数据库交互时,除了基本的查询和更新操作,还经常需要使用存储过程和触发器。下面我将简要介绍如何在C#中使用存储过程和触发器。 存储过程 存储过程是一组为了完成特定功能的SQL语句集,它可以被存储在数据库中,并可以被调用执行。在C#中,你可以使用 Sql

    2024年01月25日
    浏览(49)
  • 数据库24:触发器的创建和使用(头歌云课)

      任务描述 相关知识 触发器的定义 触发器和存储过程的区别 触发器的优点 触发器的作用 触发器的分类 DML触发器 DDL触发器 登录触发器 触发器的工作原理 inserted表 deleted表 创建触发器 编程要求 测试说明 任务描述 本关任务:通过实验,加深对数据完整性的理解,掌握创建

    2024年02月05日
    浏览(84)
  • Mysql数据库实验报告--实验五 存储过程和触发器

    在这个系列会更新一些最近老师要求写的实验报告~ 大家尽量对着我的文章做一个参考,不要盲目的cv,毕竟这个对于我们以后的工作学习还是十分重要的。 从这个实验开始,就不在cmd命令行里面进行mysql数据库的操作,因为代码长度和代码的复杂性,需使用 MySQL Workbench: 双

    2024年02月09日
    浏览(68)
  • MySQL数据库——MySQL创建触发器(CREATE TRIGGER)

    触发器是与 MySQL 数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 在 MySQL 5.7 中,可以使用 CREATE TRIGGER 语句创建触发器。 语法格式如下: 语法说明如下。 1) 触发器名 触发器

    2024年02月10日
    浏览(50)
  • 数据库系统原理及MySQL应用教程实验八触发器创建与管理

    1.理解触发器的概念与类型。 2.理解触发器的功能及工作原理。 3.掌握创建、更改、删除触发器的方法。 4.掌握利用触发器维护数据完整性的方法。 1.验证性实验:某同学定义产品信息product表,并对其触发器创建与管理 2.设计性试验:某同学定义产品信息product表,并对其

    2024年02月04日
    浏览(51)
  • 达梦数据库(DM7)自动更新时间触发器及时间排序

    达梦数据库(DM7)目前支持的列属性并不多,比如并不支持直接创建自动记录更新时间的列属性,但是这个功能在实际数据库使用中又比较频繁,本文简单记录如何通过时间触发器设置某列自动记录更新时间,即所谓的update_time列。另外,实际使用中可能会有这种排序需求:永远

    2024年02月14日
    浏览(61)
  • SQL Server之触发器

    触发器 触发器是一种特殊类型的存储过程,主要是通过事件触发来执行的,而存储过程可以通过存储过程名来直接调用。当往某一个数据表中插入、修改或者删除记录时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包