概述
EXISTS()在触发器中比较常用 用来判断有无返回查询的数据行 如果有 返回true 否则 false
有三种触发器 1.是for触发器
2.是after触发器: for触发器属于after触发器 所以基本上直接用after触发器就好了
3.before触发器
4.instead of触发器
after触发器后面可以跟insert,update,delete等简单的操作,意思就是说 当发生了insert,update,delete的sql语句后 就会触发事件 执行某个事件 接下来看一下实例;
两张表之间的联系: 当插入users表一条数据的时候 系统自动往insertRecord插入数据
create trigger
mytrigger
on Users
after insert AFTER 指定触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被触发
as
insert into InsertRecord(UserName,Age,Gender,[Address]) select UserName,Age,Gender,[Address] from inserted
insert into Users(UserName,Age,Gender,[Address]) values('关晓彤1','19','女','北京'); 触发器在Users这里 所以执行这个操作才可以执行上面那个插入语句
这是当对 users进行更新的时候 会往UpdateRecord插入数据
create trigger
mytrigger1
on Users
after update
as
insert into UpdateRecord(UserName,Age,Gender,[Address]) select UserName,Age,Gender,[Address] from deleted;
这里为什么不用 values 因为 这是数据迁移 从一张表上迁移到另一张表 而values是插入数据里面放的是数据 而 select存放的是字段
//字段和关键字重名要用[]括起来 不然会报错
update Users set Age=20 where UserName='关晓彤'; insert 和update先后顺序不要紧
instead of触发器:
create trigger
mytrigger2
on Users
instead of insert
as
if
datename(week,getdate()) in ('星期六','星期天') or (datepart(hour,getdate()) not between 9 and 15) //datename是函数返回 某一结果 getdate()返回字符串
begin
print '非工作时间,不允许插入数据';
rollback;
end
insert into Users (UserName,Gender) values('张三丰','男');
alter table Users enable trigger mytrigger; //enable是启用 名叫mytrigger的触发器
DISABLE则相反
总结:
1.after insert等 意思就是说在执行after操作后 执行指定的操作
2.before insert等 意思实在执行insert操作之前执行操作 比如删除主键的前提要先删除对应的外键,所以得用before触发器
3.instead of触发器是包涵判断条件的。
4.INSTEAD OF 触发器用来代替通常的触发动作,即当对表进行INSERT、UPDATE 或 DELETE 操作时,系统不是直接对表执行这些操作,而是把操作内容交给触发器,让触发器检查所进行的操作是否正确。如正确才进行相应的操作。
5. 每一个表上只能创建一个 INSTEAD OF 触发器,但可以创建多个 AFTER 触发器。
6. Instead Of 触发器可以进行以下操作:
• 忽略批处理中的某些部分。
•不处理批处理中的某些部分并记录有问题的行。
•如果遇到错误情况则采取备用操作。
最后
以上就是明理老师为你收集整理的触发器的基本使用的全部内容,希望文章能够帮你解决触发器的基本使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复