软件下载

mysql触发器怎么写(SQL创建触发器教程)

软件下载 投稿 2022-07-14 17:40:26 浏览

什么是SQL触发器?

触发器是一种特殊类型的储存过程。他在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应或者执行一段相应的 INSERT、UPDATE 或 DELETE 语句程序。也即在执行某个事件时触发另外一个事件的执行。

SQL触发器特点

  1. 触发器是一种主要机制来强制业务规则和数据完整性的事务机制。
  2. 将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。
  3. 触发器可以查询其它表,并可以包含复杂的Transact-SQL语句。
SQL创建触发器

 

SQL触发器的功能

  1. 触发器可通过数据库中的相关表实现级联更改。
  2. 触发器可以强制用比 CHECK 约束定义的约束更为复杂的约束。
  3. 触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。
  4. 触发器还可以强制执行业务规则。
SQL创建触发器

 

创建触发器

语法:

CREATE TRIGGER trigger_name 
ON {table_name | view_name} 
{FOR | After | Instead of } [ insert, update,delete ]
AS 
 sql_statement 
go

创建一个触发器实例:

功能:newtable1中至多能存40个班级。

解析:只需让newtable1.Cid<=40即可,或者约束newtable1.Cid>40时,时间回滚报错。

创建表newtable1:SQL语句创建表单table

--建表
create table newtable1
(
Cid int not null,
CName nvarchar(50) null
)

功能实现:

第一种:Check约束实现,建约束SQL数据完整性介绍和SQL语句创建约束

--check constraint 
if exists (select * from sysobjects where name = 'CK_newtable1_Cid')
alter table newtable1
drop constraint CK_newtable1_Cid
go 
--add constraint 
alter table newtable1
add constraint CK_newtable1_Cid check (Cid>0 and Cid<=40)
go
SQL创建触发器

 

执行插入语句:

insert into newtable1 values (42 , '028班')
SQL创建触发器

 

注:

check约束已生效。

第二种:触发器trigger实现

1.判断触发器是否存在

----trigger constraint
if object_id(N'newtable1Insert',N'tr') is not null
drop trigger newtable1Insert
go

2.创建功能触发器,事务回滚参见:SQL 事务机制-transaction

--create trigger
create trigger newtable1Insert
on newtable1
for insert
as 
 declare @Cid int
 select @Cid = newtable1.Cid from newtable1 inner join inserted on newtable1.Cid=inserted.Cid
 print @Cid
 if(@Cid>40)
 begin 
 raiserror('班级编号不能超过40个!',16,8)
	 rollback tran 
	end
	 go 
SQL创建触发器

 

注:

触发器约束:Cid<=39

3.执行违法插入语句,如果错误,输出错误提示“班级编号不能超过39个!”并实现回滚。

insert into newtable1 values (40,'028班')
SQL创建触发器

 

如果在tigger中设置 Cid<43,则会满足最小的约束check约束

insert into newtable1 values (40 , '028班')
SQL创建触发器

 

选择了check约束,是数据更完整!

SQL创建触发器

 

raiserror('', , )函数

用于抛出一个错误。

语法:

raiserror ( 
 { msg_id | msg_str | @local_variable } 
 { ,severity }
 {,state } 
 [ ,argument [ ,...n ] ] 
 ) 
 [ with option [ ,...n ] ]

注:

msg_id:表示可以是一个sys.messages表中定义的消息代号; 使用 sp_addmessage 存储在 sys.messages 目录视图中的用户定义错误消息号。用户定义错误消息的错误号应当大于 50000。

msg_str:表示也可以是一个用户定义消息,该错误消息最长可以有 2047 个字符;(如果是常量,请使用N'xxxx',因为是nvarchar的) 当指定 msg_str 时,RAISERROR 将引发一个错误号为 5000 的错误消息。

@local_variable:表示也可以是按照 msg_str 方式的格式化字符串变量。

severity:用户定义的与该消息关联的严重级别,任何用户都可以指定 0 到 18 之间的严重级别: [0,10]的闭区间内,不会跳到catch;如果是[11,19],则跳到catch;如果[20,无穷),则直接终止数据库连接。

state: 如果在多个位置引发相同的用户定义错误, 则针对每个位置使用唯一的状态号有助于找到引发错误的代码段。介于 1 至 127 之间的任意整数,state 默认值为1。当state 值为 0 或大于 127 时会生成错误!

argument:用于代替 msg_str 或对应于 msg_id 的消息中的定义的变量的参数。

option:错误的自定义选项,可以是下表中的任一值:

  1. log :在错误日志和应用程序日志中记录错误;
  2. nowait:将消息立即发送给客户端;
  3. seterror:将 @@error 值和 error_number值设置为 msg_id 或 50000;

简单实例:

抛出错误:I am a good boy!

raiserror('I am a good boy!',16,8)
SQL创建触发器

 

本文部分内容参考博客,如有错误敬请指正,如有侵权,请联系修改,谢谢。

「真诚赞赏,手留余香」

求资源网

真诚赞赏,手留余香

使用微信扫描二维码完成支付

继续浏览有关编程的文章
发表评论
留言与评论(共有 0 条评论)
   
验证码:
版权声明

求资源网所发布的一切破解补丁,软件,以及其他分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途。
否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。