- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 数据库的保护
6.1 数据的安全性保护
6.1.1 数据库安全性概述
6.1.2 安全性控制的一般方法
6.2 数据的完整性保护
6.2.1 完整性的约束条件
6.2.2 完整性控制
6.2.3 触发器的概念
触发器(trigger)是个特殊的存储过程,它的执行不是由调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。一个触发器有三个基本部件:触发事件或语句、触发器的限制、触发器动作。
触发事件或语句:为引起触发器激发的SQL语句,是对指定表INSERT、UPDATE或DELETE语句。
触发器限制:为一布尔表达式,当触发器激发时该条件必须为TRUE。触发器的动作:为一个SQL块(过程)。当触发语句发出,触发器的限制计算得TRUE时,它被执行。在触发器动作的语句中,可使用触发器的处理的当前行的列值(新值、老值)CREATE TRIGGER Schema_Name, sysname, Schema_Name.Trigger_Name, sysname, Trigger_Name
ON Schema_Name, sysname, Schema_Name.Table_Name, sysname, Table_Name
AFTER Data_Modification_Statements, , INSERT,DELETE,UPDATE
AS
BEGIN
SET NOCOUNT ON;
-- Insert statements for trigger here
END
例:
CREATE TRIGGER trgInsertStudent
ON student
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON
select count(*) from student
END
例:创建一防止删除和修改的触发器
CREATE TRIGGER trgNotUpdateStudent
ON student
AFTER Delete,Update
AS
BEGIN
SET NOCOUNT ON
raiserror(不能删除或更新记录,0,0)
Rollback transaction
END
例:利用Update()函数阻止对某例的更新
CREATE TRIGGER [dbo].[trgUpDateS]
ON [dbo].[Student]
AFTER Update
AS
BEGIN
SET NOCOUNT ON;
if update(sScore)
rollback transaction
END
2.Inserted表和Deleted表
在触发器中,Inserted表用于存储INSERT和UPDATE语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到inserted表和触发器表中。Inserted表中的行是触发器表中新行的副本。
在触发器中,Deleted表用于存储DELETE和UPDATE语句所影响的行的复本。在执行DELETE或UPDATE语句时,行从触发器表中删除,并传输到deleted表中。Deleted表和触发器表通常没有相同的行。
例:删除学生时,显示学生信息
CREATE TRIGGER trgDeleteStudent
ON student
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
select * from deleted
END
例:创建触发器,使每个班的选课人数不能大于5
CREATE TRIGGER [dbo].[trgSCLFive]
ON [dbo].[SelectRecord]
AFTER insert
AS
BEGIN
SET NOCOUNT ON;
declare @a int,@cID char(3)
select @cID=rcID from inserted
select @a=count(*) from selectRecord where rcID=@cID
if @a5
rollback transaction
END
3.创建Instead Of触发器
当为表或视图定义了针对某一操作(INSERT、 DELETE、 UPDATE) 的INSTEAD OF 类型触发器且执行了相应的操作时,尽管触发器被触发,但相应的操作并不被执行,而运行的仅是触发器SQL 语句本身。CREATE TRIGGER [dbo].[trg
文档评论(0)