sql触发器使用教程和命名规范

sql触发器使用教程和命名规范

ID:9960146

大小:39.47 KB

页数:13页

时间:2018-05-17

sql触发器使用教程和命名规范_第1页
sql触发器使用教程和命名规范_第2页
sql触发器使用教程和命名规范_第3页
sql触发器使用教程和命名规范_第4页
sql触发器使用教程和命名规范_第5页
资源描述:

《sql触发器使用教程和命名规范》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、SQL触发器使用教程和命名规范1,触发器简介触发器(Trigger)是数据库对象的一种,编码方式类似存储过程,与某张表(Table)相关联,当有DML语句对表进行操作时,可以引起触发器的执行,达到对插入记录一致性,正确性和规范性控制的目的。在当年C/S时代盛行的时候,由于客户端直接连接数据库,能保证数据库一致性的只有数据库本身,此时主键(PrimaryKey),外键(ForeignKey),约束(Constraint)和触发器成为必要的控制机制。而触发器的实现比较灵活,可编程性强,自然成为了最流行的控制机制。到了B/S时代,发展成4层架构,客户端不再能直接访问数

2、据库,只有中间件才可以访问数据库。要控制数据库的一致性,既可以在中间件里控制,也可以在数据库端控制。很多的青睐Java的开发者,随之将数据库当成一个黑盒,把大多数的数据控制工作放在了Servlet中执行。这样做,不需要了解太多的数据库知识,也减少了数据库编程的复杂性,但同时增加了Servlet编程的工作量。从架构设计来看,中间件的功能是检查业务正确性和执行业务逻辑,如果把数据的一致性检查放到中间件去做,需要在所有涉及到数据写入的地方进行数据一致性检查。由于数据库访问相对于中间件来说是远程调用,要编写统一的数据一致性检查代码并非易事,一般采用在多个地方的增加类似的

3、检查步骤。一旦一致性检查过程发生调整,势必导致多个地方的修改,不仅增加工作量,而且无法保证每个检查步骤的正确性。触发器的应用,应该放在关键的,多方发起的,高频访问的数据表上,过多使用触发器,会增加数据库负担,降低数据库性能。而放弃使用触发器,则会导致系统架构设计上的问题,影响系统的稳定性。2,触发器示例触发器代码类似存储过程,以PL/SQL脚本编写。下面是一个触发器的示例:新建员工工资表salarycreate table SALARY(  EMPLOYEE_ID NUMBER,--员工ID MONTH       VARCHAR2(6),--工资月份 AMOU

4、NT      NUMBER --工资金额)创建与salary关联的触发器salary_trg_rai1  Createorreplacetriggersalary_trg_rai2  Afterinsertonsalary3  Foreachrow4    declare5  Begin6    Dbms_output.put_line(‘员工ID:’

5、

6、:new.employee_id);7    Dbms_output.put_line(‘工资月份:’

7、

8、:new.month);8    Dbms_output.put_line(‘工资:’

9、

10、:new.a

11、mount);9    Dbms_output.put_line(‘触发器已被执行’);10  End;打开一个SQLWindow窗口(使用PL/SQLDeveloper工具),或在sqlplus中输入:Insertintosalary(employee_id,month,amount)values(1,‘200606’,10000);执行后可以在sqlplus中,或在SQLWindow窗口的Output中见到员工ID:1工资月份:200606工资:10000触发器已执行在代码的第一行,定义了数据库对象的类型是trigger,定义触发器的名称是salary_tr

12、g_rai第二行说明了这是一个after触发器,在DML操作实施之后执行。紧接着的insert说明了这是一个针对insert操作的触发器,每个对该表进行的insert操作都会执行这个触发器。第三行说明了这是一个针对行级的触发器,当插入的记录有n条时,在每一条插入操作时都会执行该触发器,总共执行n次。Declare后面跟的是本地变量定义部分,如果没有本地变量定义,此部分可以为空Begin和end括起来的代码,是触发器的执行部分,一般会对插入记录进行一致性检查,在本例中打印了插入的记录和“触发器已执行”。其中:new对象表示了插入的记录,可以通过:new.colum

13、n_name来引用记录的每个字段值3,触发器语法和功能触发器的语法如下CREATEORREPLACETRIGGER trigger_name

14、after

15、insteadof>

16、update

17、delete>ON table_name[FOREACHROW]WHEN(condition)DECLAREBEGIN      --触发器代码END;Trigger_name是触发器的名称。

18、after

19、insteadof>可以选择before或者after或insteadof。Before表示在DML语句实施前执行触发器,而aft

20、er表示在在dml语句实

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。