数据库之 触发器 基础

原创 2015年11月18日 21:43:46
触发器概述:
特殊程序
与函数和存储过程类似,都属于PL/SQL块
不可以直接调用,只能是某种事件触发 

分类:DDL触发器、DML触发器、instead-of触发器(替代某个动作的触发器)、系统触发器(对系统访问进行控制)

触发器body部分不可以超过32760字节
一般情况下,非系统触发器是不能直接调用DDL、DCL、TCL
尽量避免使用long 和long raw 格式(用clob blob)

例子:
create trigger trig1
before delete on emp
declare 
     x number :=10;
begin 
    dbms_output.put_line('delete on emp');
end trig1;

DDL触发器 
创建、修改和删除数据库对象时被触发
主要用来控制、监控DDL语句
常见的DDL事件:ALTER CREATE DROP GRANT REVOKE TRUNC

创建格式:
CREATE[OR REPLACE] TRIGGER trigger_name
{BEFORE|AFTER|INSTEAD OF}ddl_event ON {DATABASE|SCHEMA}
[WHEN(condition)]
[DECLARE 
    declaration]
BEGIN 
    statement
END;

删除触发器:drop trigger 触发器名

例子:
create or replace trigger ddltrigger
before create on schema
begin 
    dbms_output.put_line('create some object on current schema');
end;

DML触发器

在执行INSERT DELETE UPDATE时被触发
主要用来检测和保存替换值得操作

行级触发器与语句级触发器

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE|AFTER}
{INSERT|UPDATE|UPDATE OF COL1[,COL2......]|DELETE} ON table_name
[FOR EACH ROW] --加就是行级触发器
[WHEN(condition)]
[DECLARE
   declaration]
BEGIN
   statement
END;

例子:
create or replace trigger dmltrig1
before delete on emp
for each row
begin
    dbms_output.put_line('1');
end;

instead-of触发器

替代触发器(一般处理视图操作)
拦截INSERT UPDATE DELETE 操作并使用代替之
通常用来管理对不可更新视图的操作

CREATE [OR REPLACE] TRIGGER trigger_name
INSREAD OF dml_event ON {object_name|database|schema}
[WHEN(condition)]
[DECLARE
   declaration]
BEGIN
   statement
END;


例子:
create or replace trigger insteadtring
instead of delete on empview
begin
   dbms_output.put_line('delete on enpview')
end;

系统触发器

系统活动发生时会触发
通常用来跟踪系统事件,审计系统访问 

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE|AFTER} db_event ON {database|schema}
[WHEN(condition)]
[DECLARE
   declaration]
BEGIN
   statement
END;

例子:
CREATE OR REPLACE TRIGGER systemtrig
after logon on database
begin
   insert into logs values ('user logged in');
end;






版权声明:本文为博主原创文章,未经博主允许不得转载。

MySQL创建触发器实现统一主机下两个数据库的表同步

首先建立要用于测试 数据库 与 表 create database a; create database b; use a create table table1(id int, val int);...
  • u014796999
  • u014796999
  • 2016年07月05日 13:44
  • 2754

SQL存储过程、触发器和游标

存储过程     1、存储过程是事先编好的、存储在数据库中的程序,这些程序用来完成对数据库的指定操作。     2、系统存储过程: SQL Server本身提供了一些存储过程,用于管理有关数...
  • peipeiboshi
  • peipeiboshi
  • 2015年06月28日 16:02
  • 2180

mysql利用触发器在删除父表的之前先删除子表记录

下面sql语句分别创建组织organization表(父表)与成员member表(子表)。注意:这两个表之间虽然创建了外键约束关系,但不存在级联删除选项。 create table organizat...
  • hanxueyu666
  • hanxueyu666
  • 2016年12月12日 16:31
  • 2121

数据库的一些基础研究和性能探讨(触发器)

一直没有机会使用到触发器,但是在一个偶然的情况下,我在做用户同步和权限删除时我想起了这个功能。 在设计数据库的时候,我往往都走进一个怪圈,可能就是应了一个数据库的前辈所说的:开发数据库的思维...
  • bullswu
  • bullswu
  • 2014年01月16日 23:37
  • 2183

数据库基础知识点二:PLSQL、游标、程序包、存储过程、触发器,序列,视图,索引,数据字典

一、PLSQL操作: -- PLSQL====逻辑代码+sql语句        --  过程代码结合sql语句语言   -- 处理业务复杂的逻辑(不同部门修改薪水)   --...
  • junlei0426
  • junlei0426
  • 2017年01月03日 17:33
  • 323

数据库基础<四>触发器

1、概念 触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程,一旦定义,任何用户 对表的增、删、改操作均由服务器自动激活相应的触发器,在DBMS核心层进行集中的完...
  • u012561696
  • u012561696
  • 2014年04月12日 14:03
  • 1201

走向面试之数据库基础:三、SQL进阶之变量、事务、存储过程与触发器

走向面试之数据库基础:三、SQL进阶之变量、事务、存储过程与触发器 一、变量那点事儿 1.1 局部变量   (1)声明局部变量 DECLARE @变量名 数据类型 D...
  • Litt_J
  • Litt_J
  • 2015年01月04日 15:21
  • 961

Oracle数据库基础(五)--索引,触发器

索引 B-Tree结构   请参照相应的图例 1--索引是一种允许直接访问数据表中某一数据行的树形结构,为了提高查询效率而引入,    是独立于表的对象,可以存放在与表不同的表空间中; ...
  • syz1217
  • syz1217
  • 2015年10月25日 12:16
  • 189

数据库基础 之 “存储过程和触发器”

数据库基础  之    “存储过程和触发器”      一想到要总结一下存储过程和触发器,就感觉有点怵头,。因为总感觉存储过程和触发器是比较高级的东西,总是不能把握。于是就一直拖着没有进行总结。不过...
  • bemavery
  • bemavery
  • 2012年07月26日 10:28
  • 1334

【数据库基础】数据库完整性控制-触发器

未完~
  • chendongqaq
  • chendongqaq
  • 2017年08月06日 00:44
  • 97
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库之 触发器 基础
举报原因:
原因补充:

(最多只允许输入30个字)