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的操作

扫描二维码关注公众号,回复: 1023453 查看本文章
  • 删除: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操作导致的被删除的原来的行的复本

猜你喜欢

转载自blog.csdn.net/shengxiaobufu/article/details/73801452
今日推荐