仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 783|回复: 8
打印 上一主题 下一主题

[学习教程] ddl触发器

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:19:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
这能找出所有错误的99.99%。它不能找出的是仅仅涉及数据文件的损坏(这很不常见)。如果你想要检查一张表,你通常应该没有选项地运行myisamchk或用-s或--silent选项的任何一个。DDL触发器像尺度触发器一样,在呼应事务时实行存储历程。但与尺度触发器分歧的是,它们其实不在呼应对表或视图的UPDATE、INSERT或DELETE语句时实行存储历程。它们次要在呼应数据界说言语(DDL)语句实行存储历程。这些语句包含CREATE、ALTER、DROP、GRANT、DENY、REVOKE和UPDATESTATISTICS等语句。

若要猎取数据库中的DDL触发器示例,请翻开SQLServerManagementStudio工具资本办理器中的“数据库触发器”文件夹(位于数据库的“可编程性”文件夹中)。右键单击触发器并选择“编写数据库触发器剧本为”。默许情形下禁用DDL触发器触发器剧本。
数据库->可编程性->数据库触发器

使用1:以下示例申明了怎样利用DDL触发器来避免数据库中的任一表、存储历程被创立、修正或删除
createtriggersafety
ondatabase
forcreate_table,drop_table,
alter_table,create_procedure,
alter_procedure,drop_procedure
as
printyoumustdisabletrigger"safety"todroporaltertables!
rollback
go

--测试(建表)
createtabletest(aint)

--动静
youmustdisabletrigger"safety"todroporaltertables!
动静3609,级别16,形态2,第1行
事件在触发器中停止。批处置已中断。


--启用触发器:
Enabletriggersafetyondatabase;
--禁用触发器:
Disabletriggersafetyondatabase;

使用2:这个示例是将用户对数据库布局改动纪录起来,以便查询。
createtriggerauditondatabaseforddl_database_level_events
as
declare@dataxml
declare@cmdnvarchar(1000)
declare@posttimenvarchar(24)
declare@spidnvarchar(6)
declare@loginnamenvarchar(100)
declare@hostnamenvarchar(100)
set@data=eventdata()
set@cmd=@data.value((/event_instance/tsqlcommand/commandtext)[1],nvarchar(1000))
set@cmd=ltrim(rtrim(replace(@cmd,,)))
set@posttime=@data.value((/event_instance/posttime)[1],nvarchar(24))
set@spid=@data.value((/event_instance/spid)[1],nvarchar(6))
set@loginname=@data.value((/event_instance/loginname)[1],nvarchar(100))
set@hostname=host_name()
insertintodbo.auditlog(command,posttime,hostname,loginname)values(@cmd,@posttime,@hostname,@loginname)
go
Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。
小女巫 该用户已被删除
沙发
发表于 2015-1-18 12:53:32 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
变相怪杰 该用户已被删除
板凳
发表于 2015-1-25 20:29:26 来自手机 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-4 02:19:55 | 只看该作者
你可以简单地认为适合的就是好,不适合就是不好。
蒙在股里 该用户已被删除
5#
发表于 2015-2-9 11:08:24 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
飘灵儿 该用户已被删除
6#
 楼主| 发表于 2015-2-27 06:16:25 | 只看该作者
无法深入到数据库系统层面去了解和探究
乐观 该用户已被删除
7#
发表于 2015-3-8 23:15:58 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
老尸 该用户已被删除
8#
发表于 2015-3-16 19:17:52 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
海妖 该用户已被删除
9#
发表于 2015-3-23 02:23:22 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:57

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表