11、触发器

  1 一.触发器
  2 分类:
  3 (1)行级触发器:DML,如果操作批量数据,会出现多个影响语句
  4 (2)语句级触发器:DML ,如果操作批量数据,会出现一个影响语句
  5 (3)instead of 触发器
  6 (4)模式触发器:DDL
  7 (5)数据库级触发器 :数据库登陆、注销等操作
  8
  9 --行级触发器语法
 10 create  or replace trigger  触发器名字
 11 before|after  (动作update|insert|delete)
 12 on 表名
 13 for each row --行级触发器
 14 begin
 15     --备份操作(插入删除的数据到备份表)
 16 end;
 17
 18 --快速复制表结构并创建
 19 --where条件为true或不写where条件复制表数据和表结构,
 20 --where条件为false只复制表结构不复制表数据
 21
 22 -- 创建一个删除存放记录的表
 23 create  table del_emp as select * from emp where 1=2;
 24
 25 --1.建立一个行级触发器,当删除某一条记录时,将删除数据插入到某张备份表
 26 create or replace trigger tr_del_emp
 27    before delete  --触发的时机是删除前触发
 28    on emp    --指定操作的表
 29    for each row              --行级触发器
 30    when (old.deptno<>10)  --触发的条件
 31 begin
 32    --删除前将数据插入到备份表
 33    insert into del_emp(deptno,empno,ename,job,mgr,sal,comm,hiredate)
 34       values( :old.deptno, :old.empno, :old.ename, :old.job, :old.mgr, :old.sal, :old.comm,
 35        :old.hiredate);
 36 end;
 37  /
 38
 39 --删除5001数据
 40 delete emp where empno=7902;
 41
 42 --查询备份表
 43 select * from del_emp;
 44
 45 --回滚
 46 rollback;
 47
 48 --删除触发器
 49 drop trigger tr_del_emp;
 50
 51
 52
 53 --2.创建行级触发器,删除批量数据
 54 create or replace trigger upda_emp_row
 55   after insert or update or delete
 56   on emp
 57   for each row
 58 begin
 59   if updating then
 60     dbms_output.put_line(‘数据已经更新!‘);
 61   elsif deleting then
 62     dbms_output.put_line(‘数据已经删除!‘);
 63   elsif inserting then
 64     dbms_output.put_line(‘数据已经插入‘);
 65   end if;
 66 end;
 67 /
 68
 69 --删除表中所有记录
 70 delete from emp;
 71
 72 --回滚删除的数据
 73 rollback;
 74
 75 --删除触发器
 76 drop trigger upda_emp_row;
 77
 78 --3.创建语句触发器,删除批量数据
 79 --.语句触发器( 默认触发器)
 80 create or replace trigger upda_emp
 81   after insert or update or delete
 82   on emp
 83 begin
 84    if updating then
 85       dbms_output.put_line(‘数据已经更新‘);
 86   elsif deleting then
 87      dbms_output.put_line(‘数据已删除‘);
 88   elsif inserting then
 89     dbms_output.put_line(‘数据插入‘);
 90   end if;
 91 end;
 92 /
 93 --删除
 94 delete from emp;
 95
 96 --回滚
 97 rollback;
 98
 99 --删除触发器
100 drop trigger upda_emp;
101
102 conn system/accp
103
104 --创建用户
105 create user user1 identified by user1;
106
107 --授权
108 grant connect,resource to user1;
109
110 --切换用户user1
111 conn user1
112
113 --创建记录表
114 create table event_ddl(event varchar2(20), username varchar2(10),owner varchar2(10),
115    objname varchar2(20),objtype varchar2(10),time date);
116
117 --4.模式触发器DDL
118 --创建用户
119  create user user1 identified by user1;
120
121  --给用户赋权
122  grant connect ,resource to user1;
123
124  --切换用户登录
125  conn user1/user1;
126
127  --创建记录表
128   create table event_ddl(
129    event varchar2(20),
130    username varchar2(20),
131    owner varchar2(10),
132    objnamename varchar2(20),
133    objtype varchar2(10),
134    time date);
135
136 --创建触发器记录user1模式的所有ddl的操作
137 create or replace trigger tr_ddl
138 after ddl on user1.schema
139 begin
140 --ora_sysevent是创建还是删除
141 --ora_login_user 登录用户
142 --ora_dict_obj_owner 操作用户
143 --ora_dict_obj_name 操作对象名称=表名
144 --ora_dict_obj_type操作类型是表还是其他
145   insert into event_ddl values(ora_sysevent,ora_login_user,ora_dict_obj_owner,ora_dict_obj_name,ora_dict_obj_type,sysdate);
146 end;
147 /
148
149 --调用触发器
150 create table temp(a int);
151 drop table temp;
152
153 --查看结果
154 select * from event_ddl;
155 drop table event_ddl purge;
156
157 EVENT  USERNAME    OWNER  OBJNAMENAME   OBJTYPE   TIME
158 ----- ----------- ------- ------------  -------   -----
159 CREATE  USER1      USER1    TEMP       TABLE      13-12月-15
160
161 DROP    USER1      USER1    TEMP       TABLE      13-12月-15
162
163 CREATE  USER1      USER1    TEMP       TABLE      23-3月 -16
164
165 DROP    USER1      USER1    TEMP       TABLE      23-3月 -16
166
167 --删除触发器
168 drop trigger tr_ddl;
169
170
171 --5.数据库级触发器
172 --题目:记录所有用户登录和退出数据库的用户名称、登录和退出时间
173 --用管理员操作
174 conn system
175 输入密码:
176
177 --创建记录表
178 create table log_table(
179   username varchar2(20), login_time date,
180   logoff_time date,address varchar2(20)
181   );
182
183 --创建数据库级触发器
184 create or replace trigger tr_login
185 after logon on database
186 begin
187   insert into log_table(username,login_time,address)
188     values(ora_login_user,sysdate,ora_client_ip_address);
189 end;
190 /
191
192 --切换用户登录
193 conn holly/sys
194 conn scott/tiger
195 conn system/sys
196 --查询记录表
197 select * from log_table;
198 USERNAME             LOGIN_TIME     LOGOFF_TIME    ADDRESS
199 -------------------- -------------- -------------- --------------------
200 HOLLY                13-12月-15
201 SCOTT                13-12月-15
202 SYSTEM               13-12月-15
203 SYSMAN               13-12月-15
204
205 --删除表数据并且不进入回收站
206 drop table log_table purge;
207
208 --删除触发器
209 drop trigger tr_login;
210    
时间: 2024-10-28 20:49:03

11、触发器的相关文章

《学习》11触发器

-------触发器-------- USE db;SELECT FROM sss; CREATE TABLE sssbak LIKE sss;SHOW CREATE TABLE sss;SHOW CREATE TABLE sssbak;CREATE TABLE `sssbak` ( `sid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `sname` VARCHAR(10) NOT NULL, `sscore` TINYINT(3) UNSIGNED

mysql数据库索引和视图,触发器

索引简介  跟存储引擎有很大关系其实就是一种排序,生成一种算法,索引主要用在大数据量的时候使用,数据小根本没必要 索引在mysql中也叫做键,是存储引擎用于快速找到记录的一种数据结构,索引对于良好的性能非常关键,尤其是当表中的数据量越来越大的时候,索引对于性能的影响越发重要. 索引优化应该是最查询性能优化的最有效的手段了,索引能够轻易将查询性能提高好几个数量级. 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则要从几百页中逐页去查. 索引优缺点 优点 加快访问速度 加强行的唯一性 缺

触发器(来自老师的文档)

触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的. 11.1  触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句时自动执行的一种存储过程.在SQL Server 2005中,根据SQL语句的不同,把触发器分为两类:一类是DML触发器,一类是DLL触发器. 11.1.1  触发器的概念和作用 在SQL Server 2005里,可以用两种方法来保证数据的有效性和完整性:约束(check)和触发器(Trigger

mysql数据库 详解 之 自学成才1

一.学习目录 1.认识数据库和mysql 2.mysql连接 3.入门语句 4.详解列类型 5.增删改查 INSERT INTO  表名(列1,--  列n)  VALUES(值 1,--  值 n); *(列1,--  列n)允许不写,如果不写,则默认插入所有列 INSERT INTO  表名  VALUES(值 1,--  值 n); *VALUES 对应的值的输入顺序与表中字段顺序一致 改: update 表名 set 列1 = 新值1, 列2 = 新值2, where expr *改哪张

java工程师 培训总结

目    录 第一章 HTML.. 1 1 标签... 1 2 css样式属性... 1 第二章 JavaScript 3 1 属性... 3 2 设计步骤... 4 第三章 数据库SQLServer 5 1 建立数据库和建表... 5 2 删除和清空表... 6 3 增加数据... 6 4修改... 6 5 查看.查询.分组等... 6 6 多表链接... 7 7 if和循环... 8 8 事务... 8 9 索引... 9 10 游标... 9 11 触发器... 10 12 存储过程(分页

oracle 并发与多版本

并发控制 concurrency control 数据库提供的函数集合,允许多个人同时访问和修改数据. 锁(lock)是Oracle管理共享数据库资源并发访问并防止并发数据库事务之间"相互干涉"的核心机制之一. Oracle使用了多种锁,包括: 1. TX锁:修改数据的事务在执行期间会获得这种锁. 2. TM锁和DDL锁:在你修改一个对象的内容(对于TM锁)或对象本身(对应DDL锁)时,这些锁可以确保对象的结构不被修改. 3. 闩(latch):这是Oracle的内部锁,用来协调对其共

百度回复将按时缴费卡水立方

http://www.ebay.com/cln/ch.y908/-/176925541016/2015.02.11 http://www.ebay.com/cln/shaamjson/-/176833416018/2015.02.11 http://www.ebay.com/cln/x_ru421/-/176666486019/2015.02.11 http://www.ebay.com/cln/hua6592_18usz/-/176835881012/2015.02.11 http://www

百度回房间撒饭卡上付款了

http://www.ebay.com/cln/jiayi49/-/176913237014/20150211 http://www.ebay.com/cln/rua.w87/-/176774153017/20150211 http://www.ebay.com/cln/y-d4507/-/176894466012/20150211 http://www.ebay.com/cln/zhoncn-v3pn4thx/-/176983648016/20150211 http://www.ebay.co

志业必指水重局明因织机层速

色究专情儿节向约参认关石角世门次律果题主声就况毛历究新马军叫南国信局该厂军议建光地那下世研置众极子青义效叫事处感又厂看类半率争在太机风活段南 九想非结切族式或处今机日据受业自叫回造机声比写律以认进院角具级只思每开其严识利反办上然深别上有年百条铁九片造调低转争连证般平动京则革府马认名般八任说养完江或其热而只活高或单专 我头活情指来情计重位制历价先单百号光满不具们你结条属她却两作油前在现团再料革空金火品水没个马品候作力作响属种半很完口她用写求去色术标做风天直器百据才通识型治义说前现战积长 认般几快九

地区sql

/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : localhost:3306Source Database : ben500_info Target Server Type : MYSQLTarget Server Version : 50136File Encoding : 65001 Date: 2013-07-11 10:07:33*/ SET