数据库触发器

  数据库触发器

  文章标签: 触发器

  本文链接:https://blog.csdn.net/lxz2018173805/article/details/106233998

  收起

  触发器

  触发器的定义

  触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL的触发器是一个能由系统自动执行对数据库修改的语句。

  触发器的作用

  1.可在写入数据表前,强制检验或转换数据。

  2.触发器发生错误时,异动的结果会被撤销。

  3.部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。

  4.可依照特定的情况,替换异动的指令 (INSTEAD OF)。

  触发器的与存储过程的唯一区别

  触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

  触发器的分类

  SQL Server 包括三种常规类型的触发器:

  1.After 触发器

  after代表触发器里面的命令在DML修改数据之后执行。

  2.Before触发器

  before代表触发器里面的命令在DML修改数据之前执行

  1

  before举例:

  在emp表上面创建触发器,当输入的工资小于1000时,自动将工资修改为1000。

  create or replace trigger tri_emp_sal_check

  before INSERT OR UPDATE ON emp

  for each row

  BEGIN

  IF :new.sal <1000 THEN

  :new.sal :=1000;

  END IF;

  END;

  3.登录触发器

  登录触发器将为响应 LOGIN 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。登录触发器将在登录的身份验证阶段完成之后且用户会话实际建立之前激发。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。

  1

  触发器的优点

  触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制用比CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。

  常用触发器示例

  新增:

  //insert

  create trigger tri_insert

  on student

  for insert

  as

  declare @student_idchar(10)

  select @student_id=s.student_id from students

  inner join insertedion s.student_id=i.student_id

  if @student_id='1'

  begin

  raiserror('不能插入1的学号!',16,8)

  rollbacktran

  end

  修改:

  go

  update

  create trigger tri_update

  on student

  for update

  as

  if update(student_id)

  begin

  raiserror('学号无法修改!',16,8)

  rollbacktran

  end

  删除:

  go

  delete

  create trigger tri_delete

  on student

  for delete

  as

  declare @student_idvarchar(10)

  select @student_id=student_id from deleted

  if @student_id='admin'

  begin

  raiserror('错误',16,8)

  rollbacktran

  end

  ————————————————

  版权声明:本文为CSDN博主「木子,李啊李」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

  原文链接:https://blog.csdn.net/lxz2018173805/article/details/106233998

 

沈阳治疗外阴白斑哪家好:http://www.wybbsy120.com/

posted @ 2020-05-22 09:31  温水木  阅读(511)  评论(0)    收藏  举报