存储过程、函数和触发器

存储过程

存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。存储过程经过语法检查和编译的SQL语句,所以执行速度比普通的SQL语句的执行速度快。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

参数有三种(IN、OUT、IN OUT),可返回多个参数值。

优点

  1. 存储过程只在创建时进行编译,以后执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
  2. 可以在单个存储过程中执行一系列的SQL语句。
  3. 可以在过程中调用另一个存储过程。可以在存储过程中调用函数。这可以简化一系列复杂语句。

缺点

  1. 不可移植性,每种数据库的内部编程语法都不太相同,当需要兼容多种数据库时,最好不要用存储过程。
  2. 业务逻辑多处存在,采用存储过程后也就意味着你的系统有一些业务逻辑不是在应用程序里处理,这种架构会增加一些系统维护和调试成本。

函数

数据库中的函数包括内置函数和自定义函数,内置函数是诸如SUM(),COUNT(),AVG()等数据库内置的函数。一般我们编写的函数都属于自定义函数。

特点

  1. 函数只有一种参数(IN),只有一条RETURN语句,只能返回单一的值。
  2. 可在SQL语句(DML或SELECT)中调用函数。由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。

存储过程和函数的比较

存储过程和函数都是事先经过编译并存储在数据库中的一段SQL语句的集合,可以提高数据处理的效率。

区别:

  • 函数只能通过return语句返回单个值或者表对象。而存储过程不允许执行return,但是通过out参数返回多个值。
  • 函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。

触发器

触发器是特殊的存储过程,存储过程需要程序调用,而触发器会自动执行