|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因此,我们的第一个“米”,就是二进制日志binlog必须是rowbased的。在rowbase下,二进制日志binlog同时记录了更新前后的整行记录。触发器
一触发器先容
触发器是一种特别的存储历程,它在拔出,删除或修正特定表中
的数据时触发实行,它比数据库自己尺度的功效有更精密和更庞大的
数据把持才能。数据库触发器有以下的感化:
*平安性。能够基于数据库的值利用户具有操纵数据库的某种权
利。
#能够基于工夫限定用户的操纵,比方不同意上班后和节沐日
修正数据库数据。
#能够基于数据库中的数据限定用户的操纵,比方不同意股票
的代价的升幅一次凌驾10%。
*审计。能够跟踪用户对数据库的操纵。
#审计用户操纵数据库的语句。
#把用户对数据库的更新写进审计表。
*完成庞大的数据完全性划定规矩。
#完成非尺度的数据完全性反省和束缚。触发器可发生比划定规矩
更加庞大的限定。与划定规矩分歧,触发器能够援用列或数据库对
象。比方,触发器可回退任何妄图吃进凌驾本人包管金的期货。
#供应可变的缺省值。
*完成庞大的非尺度的数据库相干完全性划定规矩。触发器能够对数
据库中相干的表举行连环更新。比方,在auths表author_code列上的
删除触发器可招致响应删除在别的表中的与之婚配的行。
#在修正或删除时级联修正或删除别的表中的与之婚配的行。
#在修正或删除时把别的表中的与之婚配的行设成NULL值。
#在修正或删除时把别的表中的与之婚配的行级联设成缺省值。
#触发器可以回绝或回退那些损坏相干完全性的变更,作废试
图举行数据更新的事件。当拔出一个与其主健不婚配的内部键
时,这类触发器会起感化。比方,能够在books.author_code
列上天生一个拔出触发器,假如新值与auths.author_code列
中的某值不婚配时,拔出被回退。
*同步及时地复制表中的数据。
*主动盘算数据值,假如数据的值到达了必定的请求,则举行特
定的处置。比方,假如公司的帐号上的资金低于5万元则当即给财政人
员发送告诫数据。
ORACLE与SYBASE数据库的触发器有必定的区分,上面将分离报告
这两种数据库触发器的感化和写法。
二ORACLE触发器
ORACLE发生数据库触发器的语法为:
create[orreplace]trigger触发器名触发工夫触发事务
on表名
[foreachrow]
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)[AND|ORUPDATE(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提供。 |
|