若天明 发表于 2015-1-16 22:27:40

MSSQL编程:触发器先容

因此,我们的第一个“米”,就是二进制日志binlog必须是rowbased的。在rowbase下,二进制日志binlog同时记录了更新前后的整行记录。触发器
一触发器先容

触发器是一种特别的存储历程,它在拔出,删除或修正特定表中

的数据时触发实行,它比数据库自己尺度的功效有更精密和更庞大的

数据把持才能。数据库触发器有以下的感化:

*平安性。能够基于数据库的值利用户具有操纵数据库的某种权

利。

#能够基于工夫限定用户的操纵,比方不同意上班后和节沐日

修正数据库数据。

#能够基于数据库中的数据限定用户的操纵,比方不同意股票

的代价的升幅一次凌驾10%。

*审计。能够跟踪用户对数据库的操纵。

#审计用户操纵数据库的语句。

#把用户对数据库的更新写进审计表。

*完成庞大的数据完全性划定规矩。

#完成非尺度的数据完全性反省和束缚。触发器可发生比划定规矩

更加庞大的限定。与划定规矩分歧,触发器能够援用列或数据库对

象。比方,触发器可回退任何妄图吃进凌驾本人包管金的期货。

#供应可变的缺省值。

*完成庞大的非尺度的数据库相干完全性划定规矩。触发器能够对数

据库中相干的表举行连环更新。比方,在auths表author_code列上的

删除触发器可招致响应删除在别的表中的与之婚配的行。

#在修正或删除时级联修正或删除别的表中的与之婚配的行。

#在修正或删除时把别的表中的与之婚配的行设成NULL值。

#在修正或删除时把别的表中的与之婚配的行级联设成缺省值。

#触发器可以回绝或回退那些损坏相干完全性的变更,作废试

图举行数据更新的事件。当拔出一个与其主健不婚配的内部键

时,这类触发器会起感化。比方,能够在books.author_code

列上天生一个拔出触发器,假如新值与auths.author_code列

中的某值不婚配时,拔出被回退。

*同步及时地复制表中的数据。

*主动盘算数据值,假如数据的值到达了必定的请求,则举行特

定的处置。比方,假如公司的帐号上的资金低于5万元则当即给财政人

员发送告诫数据。

ORACLE与SYBASE数据库的触发器有必定的区分,上面将分离报告

这两种数据库触发器的感化和写法。



二ORACLE触发器

ORACLE发生数据库触发器的语法为:

createtrigger触发器名触发工夫触发事务

on表名



pl/sql语句

个中:

触发器名:触发器工具的称号。因为触发器是数据库主动实行

的,因而该称号只是一个称号,没有本色的用处。

触发工夫:指明触发器什么时候实行,该值可取:

before---暗示在数据库举措之前触发器实行;

after---暗示在数据库举措以后动身器实行。

触发事务:指明哪些数据库举措会触发此触发器:

insert:数据库拔出会触发此触发器;

update:数据库修正会触发此触发器;

delete:数据库删除会触发此触发器。

表名:数据库触发器地点的表。

foreachrow:对表的每行触发器实行一次。假如没有这一

选项,则只对全部表实行一次。

举例:上面的触发器在更新表auths之前触发,目标是不同意在

周末修正表:

createtriggerauth_secure

beforeinsertorupdateordelete//对整表更新前触发

onauths

begin

if(to_char(sysdate,DY)=SUN

RAISE_APPLICATION_ERROR(-20600,不克不及在周末修正表auths);

endif;

end



三SYBASE数据库触发器

SYBASE数据库触发器的感化与ORACLE十分相似,唯一较小的差别。

SYBASE发生触发器的语法为:

CREATETRIGGER触发器名

ON表名

FORINSERT,UPDATE,DELETE

AS

SQL_statement|

FORINSERT,UPDATE

AS

IFUPDATE(column_name)...

SQL_statements

下面FOR子句用来指定在触发器上的哪些数据更新命令可激该死

触发器。IFUPDATE子句反省对指定列的操纵范例,在IFUPDATE子句

中可指定多个列。

与ORACLE分歧,关于每条SQL语句,触发器只实行一次。触发器

在数据更新语句完成今后当即实行。触发器和启动它的语句被看成一

个事件处置,事件能够在触发器中回退。

上面举例申明SYBASE触发器的写法。

createtriggerforinsert_books

onbooks

forinsert

as

if(selectcount(*)fromauths,inserted

whereauths.author_code=insert.author_code)!=@@rowcount

begin

rollbacktransaction

print"books表中author_code列的值在auths表中不存在。"

end




MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者AmbroseTwebaze提供。

只想知道 发表于 2015-1-19 13:18:21

对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。

若天明 发表于 2015-1-24 15:13:27

从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。

乐观 发表于 2015-2-1 18:13:07

但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。

admin 发表于 2015-2-7 13:33:43

我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!

再现理想 发表于 2015-2-22 05:33:49

在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。

谁可相欹 发表于 2015-3-6 23:19:44

一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。

透明 发表于 2015-3-13 22:31:22

对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。

深爱那片海 发表于 2015-3-20 21:05:56

对于微软系列的东西除了一遍遍尝试还真没有太好的办法
页: [1]
查看完整版本: MSSQL编程:触发器先容