Stored Procedure & Trigger

存储过程

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

优点

  • 封装编译的sql语句,能隐藏复杂的商业逻辑
  • 可以被外部程序直接调用,接受参数并返回值

缺点

  • 存储过程不可被select指令运行
  • 存储过程往往定制化于特定的数据库上,对编程语言的接口没有达成同意规范。当切换到其他厂商的数据库系统时,一般需要重写原有的存储过程
  • 存储过程的性能调校与撰写,受限于各种数据库系统
  • 目前业界几乎不用存储过程,存储过程的功能完全可由编程语言代替

触发器

触发器是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会激活它执行。

和编程语言中的事件机制思想相似。

触发器创建四要素

  • 监视地点(table)
  • 监视事件(insert/update/delete)
  • 触发时间(after/before)
  • 触发事件(insert/update/delete)

一个例子

1
2
3
4
5
6
7
8
9
10
11
12
-- 触发器t1建立在表orders上
-- 在orders每次发生插入操作后被触发
-- 触发后执行`update goods set num=num-2 where gid = 1;`
create trigger t1
after
insert
on orders
for each row
begin
update goods set num=num-2 where gid = 1;
end$