00201 数据库基础:函数、触发器TRIGGER和存储过程PROCEDURE

/本博文语法基于SQL SERVER 2008

自建函数FUNCTION

用户自己写的一些SQL代码的组合,从而实现特定的功能
创建函数的语法:

CREATE FUNCTION function_name
    (arg1 type1, arg2 type2, arg2 type3)    
    RETURNS ...

大多数情况下,运行函数会返回一个表,该表可以作为select语句的from子句的对象来进行查询,或者嵌套在where语句之中,从而实现逻辑比较复杂的查询。

存储过程PROCEDURE

涵义:类似于模块的概念,是打包好的代码,用于实现固定的功能,可以通过引用封装好的存储过程来提高开发的效率

这里写图片描述

创建存储过程

CREATE RROCEDURE procedure_name
      AS sql_statements

引用:只要给出参数就能调用封装在存储过程里的语句

CALL procedure_name (arg1, arg2...)

意义:通过封装存储过程,可以大大提高数据库的易用性,尤其是对于不会写SQL代码的人来讲,只要在可视化界面输入参数,就会自动调用存储过程得出结果。

触发器TRIGGER

涵义:对特定表执行特定操作时自动触发——用于强制执行某些规则,保证数据库里的数据安全(比CHECK约束更严格)。比如说有一些关键数据,绝对不允许随便改动,就可以弄一个触发器,只要对这些数据执行insert/update/delete,就马上执行回退操作,撤销该操作。

语法:

CREATE TRIGGER trigger_name 
    ON table_name/view_name 
    FOR/AFTER/INSTEAD OF INSERT/UPDATE/DELETE 
    AS sql_statement
/after: 在指定操作之后触发
/for:默认操作,默认after,用它跟用after没区别
/instead of:不执行该操作而是执行触发器本身

trigger的操作

  • 删除:DROP TRIGGER trigger_name
  • 查看已有触发器:
SELECT * FROM sysobjects WHERE xtype='TR'
  • 修改:
ALTER TRIGGER trigger_name
    ON table_name/view_name
    FOR/AFTER/INSTEAD OF INSERT/DELETE/UPDATE
    AS sql_statement 
  • 禁用
ALTER TABLE table_name
DISABLE TRIGGER trigger_name/ALL
GO
/ALL 禁用所有

引用的两个特殊表:
inserted:刚刚插入的对象,保存insert和update操作导致的更新的行的复本
deleted:刚刚删除的对象,保存delete和update操作导致的被删除的原来的行的复本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验5.1 存储过程的建立与使用 一、实验目的 理解存储过程的概念、作用、建立和调用方法。 二、实验原理 使用CREATE PROCEDURE语句创建存储过程,ALTER PROCEDURE语句修改存储过程,DROP PROCEDURE语句删除存储过程存储过程有不带参数的、有带输入参数的、有带输出参数(output)的,还可以有带返回值的。创建好的存储过程可以使用EXEC procedure_name语句执行。 实验5.2 触发器的建立与使用 一、实验目的 理解触发器的概念和作用;了解触发器的分类及触发条件;掌握触发器的定义及应用。 二、实验原理 1、 使用CREATE TRIGGER语句定义触发器,ALTER TRIGGER语句修改触发器,DROP TRIGGER语句删除触发器。 2、 触发器分AFTER/FOR和INSTEAD OF两种类型:AFTER/FOR类型的触发器是在相应的触发语句(insert、delete、update)执行完后被触发的。如果触发语句对应的表上有完整性约束,这些完整性约束必须不违背时,相应的触发语句才能执行,然后才能触发对应的AFTER/FOR类型的触发器。INSTEAD OF类型的触发器会在触发语句(insert、delete、update)执行之前被触发,并取代相应的触发语句。 3、 在表或视图上,每个INSERT、UPDATE或DELETE语句只能创建一个INSTEAD OF类型的触发器,无法为有外键约束且指定为级联删除或级联修改的表创建DELETE或UPDATE语句上的INSTEAD OF 类型的触发器。 SQL SERVER为每个触发器都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发器作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发器执行完后,这两个表也会自动删除。当执行INSERT时,INSERTED表中保存要向表中插入的所有行;当执行DELETE时,DELETED表中保存要从表中删除的所有行;当执行UPDATE时,修改前的行保存在DELETED表中,修改后的行保存在INSERTED行中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值