概述
1如何创建触发器
触发器创建语法:
(1)
CREATETRIGGER trigger_name
ON table|view
FOR|AFTER|INSTEADOF [DELETE][,INSERT][,UPDATE]
AS
Sql_statement[…n]
(2)
CREATETRIGGER trigger_name
ON table|view
FOR|AFTER|INSTEADOF [DELETE][,INSERT][,UPDATE]
AS
IFUPDATE(column)
[{AND|OR}UPDATE(COLUMN)][…]
IF(COLUMNS_UPDATED())
Sql_statement[…n]
注:(不同数据库支持不同的类型触发器,有些还支持before类型触发器,像SQL server 就不支持before触发器)
2触发器的种类
一、DML触发器:当发出UPDATE、INSERT、DELETE命令就可以触发已定义好的DML触发器,是最简单和常用的一种触发器
语法:
create or replace trigger trigger_name
after|before insert|update|delete
on table_name
for each row
二、Instead-of触发器:当向一个由多个表联接成的视图作DML操作时,一般情况下是不允许的,这时候就可以用Instead-of触发器来解决这种问题(在触发器写代码分别对各表作相应DML操作),语法是这样的:
create or replace trigger trigger_name
instead of insert|update|delete
on view_name
for each row
三、DDL触发器:当发出CREATE、ALTER、DROP、TRUNCATE命令时会触发已定义好的DDL触发器,这种触发器可以用来监控某个用户或整个数据库的所有对象的结构变化
语法:
create or replace trigger trigger_name
before|after create|alter|drop|truncate
on schema|database
例:
–禁止用CREATE、ALTER、DROP、TRUNCATE命令操作APPS用户的对象
create or replace trigger apps_no_ddl
before create or alter or drop or truncate
on apps
begin
raise_application_error(-20001,'不允许用DDL操作APPS用户的对象');
end;
四、DB事件触发器:当STARTUP、SHUTDOWN、LOGON、LOGOFF数据库时就会触发DB事件触发器,这种触发器可以用来监控数据库什么时候关闭/打,或者用户的LOGON/LOGOFF数据库情况
语法:
create or replace trigger trigger_name
before|after startup|shutdown|logon|logoff
on database
例:
–记录数据库关闭的时间(shutdown类型要用关键字before,startup用after)
create or replace trigger db_shutdown
before shutdown
on database
begin
insert into test_tbl(log_event) values('db shutdown at '||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
commit;
end;
–记录用户LOGON时间(logoff类型要用关键字before,logon用after)
create or replace trigger user_logon_db
after logon
on database
begin
insert into test_tbl(username,logon_time) values(user,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'));
commit;
end;
注意:要创建DDL和DB事件这两种触发器必须要有DBA的权限才行
本文转载自https://www.cnblogs.com/jianxh/articles/780214.html
## 使用触发器的优点
使用触发器有如下优点:
- 自动执行。触发器在对表的数百据作了任何修改(比如手工输入或者应用程度序的操作)之后立即被激活。
- 级联更新。触发器可以通过数据库中的相关表进行层叠更改,这比直接把问代码写在前台的做法更安全合理。
- 强化约束。触发器可以引用其它表中的列,能够实现答比CHECK约束更为复杂的约束。
- 跟踪变化。触发器可以阻止数据库中未经许可版的指定更新和变化。
- 强制业务逻辑。触发器可用于执行管权理任务,并强制影响数据库的复杂业务规则。
触发器的使用
create trigger t_teacher on teacher
after update
as
begin
declare @age int,@sal float
select @age=age from deleted
select @sal=sal from deleted
if(@age <> (select age from inserted )and @sal <>(select sal from inserted))
print '更新了年龄和工资 '
else if(@age <> (select age from inserted )and @sal =(select sal from inserted))
print '更新了工资 '
else if(@age = (select age from inserted )and @sal <>(select sal from inserted))
print '更新了年龄 '
end
update Teacher
set age=age+1 where Tno='0001'**/
/**
5. 在不删除触发器的前提下,使3创建的触发器无效;
alter table teacher disable trigger t_teacher**/
最后
以上就是眼睛大果汁为你收集整理的什么是Sql触发器的全部内容,希望文章能够帮你解决什么是Sql触发器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复