有些人早就听说,只是一直素未谋面,千呼万唤始出来还犹抱琵琶半遮面,害羞的小姑凉。
在机房收费系统个人重构时体验了存储过程的魅力,当时最直接的体会就是它封装了SQL语句,包括了增删改查。
当遇到了牛腩新闻发布系统,遇上了触发器时,敲下代码:
USE [newssystem] GO /****** Object: Trigger [dbo].[trigCategoryDelete] Script Date: 12/08/2014 16:13:28 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: 黎卓玲 -- Create date: 2014-12-08 15:56 -- Description: 删除类别触发器 -- ============================================= ALTER TRIGGER [dbo].[trigCategoryDelete] --触发器的名称(命名规范) ON [dbo].[category] --ON后面写的是针对那张表进行触发器的创建 AFTER DELETE --对表的三种操作INSERT,DELETE,UPDATE AS BEGIN --删除后会放在一张临时的表中 Delete news where caId=(select id from deleted) --从中选出所有的删除记录 END
哇哦,在哪在哪曾静沧海过如此相似的你。哦,想起了有个名字叫存过过程:
USE [newssystem] GO /****** Object: StoredProcedure [dbo].[news_delete] Script Date: 01/03/2015 16:57:52 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: 黎卓玲 -- Create date: 2014-12-10 16:02:50 -- Description: 删除新闻 -- ============================================= ALTER PROCEDURE [dbo].[news_delete] @id int --根据ID删除 AS BEGIN --先删除该新闻下的评论(也可以用触发器) delete comment where newsId =@id --再删除新闻本身 delete news where id =@id END
可见,触发器与存储过程很类似,都是SQL语句集,在大型的数据库中两者都起到非常重要的作用。从本质来说触发器是一种特殊的存储过程,在特定的语言事件中发生时自动执行。
简单来说存储过程,一个恰当不恰当例子相当于一个存放水果的盘子,里面放着各种招待客人用的水果。存储过程模块化的程序设计,提高了代码可用性和开发效率、运行效率。
触发器实现主键和外键所不能保证的复杂的参照完整性和数据一致性,实现级联运行即对数据库中相关的表进行级联修改、存储过程的调用。
不同的是触发器不能执行EXECUTE语句的调用。触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。
对于触发器与存储过程的学习与运用还有待于进一步的深入,希望大家多多指导相互学习!