sql中的触发器是一种什么机制,SQL触发器的作用

sql中的触发器是一种什么机制,SQL触发器的作用,SQLServer中的触发器基本语法与作用

触发器是一种特殊类型的存储过程,与我们之前介绍的存储过程不同。触发器由事件触发,并自动调用和执行。可以通过存储过程的名称来调用存储过程。本文介绍了SQLServer中触发器的基本语法和功能。和感兴趣的朋友一起学习吧。

什么是触发器?

触发器是在插入、更新或删除表时自动执行的存储过程。当触发器插入、更新或删除表时自动执行的特殊存储过程。触发器通常用于检查更复杂的约束。触发器与普通存储过程的区别在于触发器是在操作一个表时触发的。当进行更新、插入、删除等操作时,系统会自动调用并执行相应的表上触发器。SQL Server 2005中的触发器可以分为两种:DML触发器和DDL触发器,其中DDL触发器可以通过影响各种数据定义语言语句来触发,如create、alter和drop语句。

SQL Server为每个触发器创建两个专用表:插入的表和删除的表。

触发器通常用于实施业务规则。

Trigger是一个高级约束,可以定义比CHECK约束更复杂的约束:可以执行复杂的SQL语句(if/while/case),可以引用other。

表格中的列

触发器是在特定的表上定义的,并且与表相关。

自动触发器执行

不能直接调用。

是事务(可滚动的)使用触发器的好处触发器可以通过数据库中的相关表级联更改,但是,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用CHECK约束定义的约束更复杂的约束。与CHECK约束不同,触发器可以引用其他表中的列。例如,触发器可以使用另一个表中的SELECT来比较插入或更新的数据,并执行其他操作,如修改数据或显示用户定义的错误消息。触发器还可以评估数据修改前后的表状态,并根据它们的差异采取对策。表中相同类型的多个触发器(INSERT、UPDATE或DELETE)允许采取多种不同的对策来响应相同的修改语句。

DML触发器分为:

1.触发后(稍后触发)

一、插入触发器

b、更新触发器

删除触发器

UPDATE 触发器创建触发的语法

创建触发器trigger_name

在表名上

[带加密]

用于[删除、插入、更新]

如同

T-SQL语句

注意:WITH ENCRYPTION表示SQL文本删除、插入、更新加密触发器定义,它指定了触发器的类型。插入触发器示例

/*创建插入触发器,并在联机记录表recordInfo上创建插入触发器*/

创建触发器tr_insert_recordInfo

在记录信息上

用于插入

如同

/*定义变量来临时存储插入的会员号、电脑号和卡号*/

declare @cardId char()

声明@PCId int

声明@CardNumber char()

/*从插入的临时表中获取插入的记录行的信息,包括电脑号和卡号*/

select @PCId=PCId,@cardId=CardId from inserted

/*根据电脑编号修改电脑的使用状态*/

更新PCInfo set PCUse=where PCId=@PCId

/*根据卡号核对会员号*/

select @ card number=card number from card info其中CardId=@cardid

/*显示计算机操作成功的信息*/

成功打印计算机!成员号是' @CardNumber ',机器号是' convert(char(),@PCId '

-插入测试数据,并使用具有会员编号的计算机。

Set nocount on -不显示受sql语句影响的记录行数。

declare @ car dint-一个声明存储卡号的变量。

-根据会员号查处卡号。

select @ cardId=cardId from card info where card number=' c '

-在recordInfo表中插入一条记录信息,包括卡号、计算机号和计算机时间。

插入recordInfo(cardId,PCId,beginTime)值(@cardId,getDate())

-检查结果。

select * from recordInfo

select * from PCInfo

update触发器示例

-创建删除触发器,并在联机记录表RecordInfo上创建删除触发器。

创建触发器tr_delete_recordInfo

在记录信息上

用于删除

如同

如果存在(select * from sysobjects,其中name='backRecordInfo ')

-如果backrecordInfo表存在,只需添加记录。

插入到backRecordInfo select * from deleted

其他

-创建backRecordInfo表,并从deleted中获取已删除的数据。

select * into backRecordInfo from deleted

打印' backRecordInfo表'数据备份成功,备份表中的数据为:'

select * from backRecordInfo

-关键代码

-测试删除触发器以删除数据。

设置nocount on

从记录信息中删除

-检查结果。

打印'记录表中的数据是:'

select * from recordInfo

delete触发器示例

-关键代码

创建触发器tr_update_recordInfo

在记录信息上

用于更新

如同

声明@beforePCId int

声明@afterPCId int

select @ before PCId=PCId from deleted

从inserted中选择@afterPCId=PCID

-根据计算机号修改使用状态-

-根据之前使用的计算机编号,将计算机的使用状态更改为:

更新PC info set PCUse=where PCId=@ before PCId

-将计算机的使用状态更改为:

更新PC info set PCUse=where PCId=@ after PCId

-显示计算机已成功更改。

打印‘换机成功!从“convert(varchar(),@beforePCId)”计算机更改为“convert(varchar(),@afterPCId)“计算机”

/*测试更新触发器并修改计算机号*/

-在显示更改之前,记录表格中的数据。

打印“更改前,记录表格中的数据”

select * from recordInfo

-显示更改前计算机表中的数据。

打印“更改前计算机表中的数据”

select * from PCInfo

设置nocount on

-将计算机号更改为

更新记录信息集PCId=其中PCId=

-检查结果。

打印“记录更改后表格中的数据”

select * from recordInfo

打印“更改后计算机表中的数据”

select * from PCInfo

使用instead of触发器instead of触发器范围,instead of触发器可以在数据表和视图中使用。通常在以下情况下建议使用instead of trigger:数据库中的数据禁止修改:比如电信部门的通话记录不能修改,一旦修改会导致通话费用统计不准确。可以回滚修改后的SQL语句,并在视图中使用触发器以自己的方式修改数据,而不是使用触发器示例。

-创建一个更新触发器,并在联机记录表recordInfo上创建一个修改(列)触发器。

创建触发器tr _ updateColum1 _ recordInfo

在记录信息上

代替插入

如同

Declare @ cardbalanceint-声明用于存储用户余额的变量。

Declare @ cardint——声明用于存储用户卡号码的变量

Declare @ pcint-声明用于存储计算机号的变量

-获取插入的临时表中插入的记录行信息,包括计算机号和卡号。

select @cardId=cardId,@PCId=PCId from inserted

select @ card balance=card balance from card info其中CardId=@CardId

Print '您的余额是:' convert (varchar (10),@ card balance)-打印余额信息。

if(@ cardbalance 2)-判断余额多少,看能不能正常使用。

'打印'余额小于人民币,不能使用。请尽快充值!”

其他

-根据计算机的编号,将计算机的使用状态修改为正在使用。

更新PCInfo set PCUse=1,其中PCId=@PCId

-将计算机记录插入recordInfo表中。

插入recordInfo(cardId,PCId,beginTime)值(@CardId,@PCId,getdate())

打印“计算机成功”

-关键代码

设置nocount on

declare @ car dint-一个声明存储卡号的变量。

-根据会员号找出卡号。

select @ cardId=cardId from card info where card number=' c001 '

-在recordInfo表中插入一条记录信息,包括卡号、计算机号和计算机时间。

插入recordInfo(cardId,PCId,beginTime)值(@cardId,1,getdate())

select * from recordInfo

select * from PCInfo

以上是边肖介绍的SQLSever中触发器的基本语法和功能。希望对你有帮助!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用sql语句实现查询排序,顺序和倒序的区别,sql按倒序排序
  • 使用sql语句实现查询排序,顺序和倒序的区别,sql按倒序排序,使用SQL语句实现查询排序,顺序和倒序
  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 一篇文章带你入门sql编程语句,一篇文章带你入门sql编程题
  • 一篇文章带你入门sql编程语句,一篇文章带你入门sql编程题,一篇文章带你入门SQL编程
  • window无法启动mysql 1067,windows无法启动mysql57服务,错误1053
  • window无法启动mysql 1067,windows无法启动mysql57服务,错误1053,windows无法启动MySQL服务报错1067的解决方法
  • vb中adodb连接数据库,,VB语言使用ADO连接、操作SQLServer数据库教程
  • sql重复记录查询的几种方法有哪些,查询重复记录sql语句
  • sql重复记录查询的几种方法有哪些,查询重复记录sql语句,SQL重复记录查询的几种方法
  • sql语句的各个关键字的解析过程详细总结怎么写,sql语句的各个关键字的解析过程详细总结图
  • sql语句的各个关键字的解析过程详细总结怎么写,sql语句的各个关键字的解析过程详细总结图,SQL语句的各个关键字的解析过程详细总结
  • sql语句游标,sqlserver游标的使用
  • sql语句游标,sqlserver游标的使用,详解SQL游标的用法
  • 留言与评论(共有 条评论)
       
    验证码: