SQL 触发器

定义

触发器是一种特殊类型的存储过程,不同于前面介绍的存储过程,它是通过事件进行触发自发调用执行,而存储过程是通过存储名调用

作用

当对表进行插入、修改、删除的时候,触发器就会自动执行存储过程

一般用在check约束或者更加复杂约束上面

       create        tringger        触发器名称                            //定义的名字的时候   一般是先把表和进行的动作合一起   例如  user_delete  对user表进行删除

意思:创建         触发器          名字

         on    表名

         在      那个表 进行触发

          for   动作

        进行     什么动作

          as

               执行的代码

例如:

create trigger users_delete
on users
for delete
as
select *from users        --进行删除完事之后  查询

可以有多个多个动作 多个触发器   每个动作只能只有一个触发器    

还有一个触发器是 把上面的for 改为 instead of       不是进行触发  而是代替触发

例如:

create trigger users_delete
on users
instead of delete           --这里的代替  删除
as
 select *from users        --用查询代替删除
View Code

作用是   保护数据的完整性,防止用户恶意删除

           还有设置权限,不允许其他人更改

delete的过去式是deleted

update的过去是updated

 insert的过去是inserted

create trigger users_deleted

  on useres

  instead of  delete

as

   select * from deleted

这里是查询   要删除的数据  只是没有删除那条数据   只是展示出来

下面是设置权限

create trigger users_deleted            
on users
instead of delete
 as
  declare @a nvarchar;                --定义变量
  select @a=ids from deleted;     --变量 = 要删除的一个主键值
  select @a;               --赋值
  if @a=5               --分支语句
  begin
    select'太丑了,不能删'        --不能删除,并且提示
    end
    else
    begin
    delete from users  where ids=@a          --进行删除
    end
View Code

级联删除(多个表删除)

create trigger users_delete
on users
instead of delete
as
declare @a nvarchar;     --定义变量
select @a= ids from deleted;   --查询要删除users的数据
delete from users where ids=@a;--用users 的 主键值  删除数据 
delete from car where no=@a;   --用car 的外检值    删除数据
View Code
原文地址:https://www.cnblogs.com/zhangwei99com/p/6600051.html