数据库中的触发器
为什么需要触发器(TRIGGER)呢?典型的应用就是银行的取款机系统。假定该系统的数据库设计需要两张表:帐户信息表(bank)存放帐户的信息,交易信息表(transInfo)存放每次的交易信息。上述结果有什么错误?您一定发现了,当张三取钱200元时,虽然交易信息表(transInfo)中保存了取钱200元的交易信息,但帐户表(bank)中的余额仍是1000,没有自动跟随修改。显然,我们应该根据交易类型是“支取”还是“存入”,自动减少或增加帐户表中的余额。而且,它还应该具有事务的特征:一旦交易失败,余额修改也应该自动取消 。那么,如何解决呢?这种特殊的业务规则使用普通约束行吗 ?答案显然是否定的 。使用事务行吗?事务能保证一旦交易失败,余额修改也自动取消。但实现不了自动修改的触发功能 。所以,最优的解决方案就是采用触发器。触发器它是一种特殊的存储过程,并且也具有事务的功能,它能在多表之间执行特殊的业务规则或保持复杂的数据逻辑关系 。
什么是触发器,再看一个例子:目前有两张表,分别存放在职员工和退休员工的信息。假定现赵二退休:赵二将从员工表中删除。一旦删除赵二的信息,应自动触发一个动作:将赵二的信息保存到退休员工表中。强调:自动触发,而不是手动,如何实现呢,当然是使用触发器。触发器是在对表进行插入、更新或删除操作时自动执行的存储过程触发器通常用于强制业务规则触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束可执行复杂的SQL语句(if/while/case)可引用其它表中的列触发器定义在特定的表上,与表相关自动触发执行,不像存储过程,不需要也不能人工调用执行,本身就是一个事务,所以,如果发现有错误,可以回滚撤销操作。
触发器的类型
INSERT触发器:当向表中插入数据时触发,自动执行触发器所定义的SQL语句。
UPDATE触发器:当更新表中某列多列时触发,自动执行触发器所定义的SQL语句。
DELETE触发器:当删除表中记录时触发,自动执行触发器所定义的SQL语句。