数据库触发器简介与实例

触发器

  其是一种特殊的存储过程。一般的存储过程是通过存储过程名直接调用,而触发器主要是

  通过事件(增、删、改)进行触发而被执行的。其在表中数据发生变化时自动强制执行。

  常见的触发器有两种:after(for)、instead of,用于insert、update、delete事件。

  after(for)        表示执行代码后,执行触发器

  instead of        表示执行代码前,用已经写好的触发器代替你的操作

触发器语法:

  create trigger 触发器的名字   on 操作表

  for|after         instead of

  update|insert|delete

  as

  SQL语句

触发器实现原理图

触发器示例

Example1

--禁止用户插入数据(实际上是先插入,然后立刻将其删除!)

  create trigger tr_insert on bank

  for          --for表示执行之后的操作

  insert       --即先执行了插入操作,同时在临时表中保存了插入记录

  as

  --执行完插入之后,在新生成的表中将刚刚插入的那条记录删除,

   --而此时得到的刚刚插入的记录的id是通过临时表 inserted得到的

  delete * from bank where cid=(select cid from inserted)

  生成上面的触发器后,当用户再输入insert语句后就见不到效果了!

  如:insert into bank values(‘0004‘,10000),是插入不进数据库的。

Example2

--删除谁就让谁的账户加上10元

  create trigger tr_dalete on bank

  instead of

  delete

  as

  update bank balance=balance+10 where cid=(select cid from deleted)

  生成这个触发器之后,当用户输入delete语句后,对应的那个id不但没有被删除掉,而且他的账户增加了10元

  如:delete from bank where cid=‘0002‘,执行完这句话后,编号为0002的账户会增加10元

时间: 2024-10-29 19:07:18

数据库触发器简介与实例的相关文章

数据库事务简介与实例

什么是数据库事务? 数据库事务是指作为单个逻辑工作单元执行的一系列操作.具体表现为:可以将几个sql语句作为一个整体来执行,这些sql语句当有一条执行出错时,那么所有的sql语句都将执行失败.也就是这些sql语句作为一个整体,要么全部执行成功,要么全部执行失败.使用事务能便于恢复数据,保证数据的一致性. 一 事务的属性 事务具有ACID属性 即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性 原子性 就是事务应作为一个工作单元,事务处理完成,所

数据库存储过程简介与实例

一.存储过程与函数的区别: 1.一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强. 2.对于存储过程来说可以返回参数(output),而函数只能返回值或者表对象. 3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面. 二.存储过程的优点: 1.执行速度更快 – 在数据库中保存的存储过程语句都是编译过的 2.允许模块化程序设计 – 类似方法的复用 3.提高系统安全性 –

mysql数据库分区功能及实例详解

分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解 一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例.mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存

Linux守护进程简介和实例详解

简介 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.Linux的大多数服务器就是用守护进程实现的.比如,Internet服务器inetd,Web服务器httpd等.同时,守护进程完成许多系统任务.比如,作业规划进程crond,打印进程lpd等. 下面是linux系统中常见的一些守护进程. amd:自动安装NFS(网络文件系统)守侯进程apmd:高级电源管理 Arpwatch:记录日志并构建一个在L

数据库触发器详讲

一:触发器的概念: 数据库触发器是一个与表相关联的,存储的plsql语句. 作用:每当一个特定的数据操作语句,(insert,update,delete)在指定的表发出时,Oracle自动地执行触发器中定义的语句序列 第一个触发器:每当成功插入新员工后   自动打印“插入新员工成功” create trigger 触发器名字(saynewemp) after (执行操作之后) insert on 操作的表(emp) declare begin dbms_output.put_line('成功插入

11g 使用rman duplicate复制数据库,创建辅助实例

一,创建所需目录 1)创建审计文件目录 [email protected] /dsg/oracle11$ cd $ORACLE_BASE/admin [email protected] /u01/app/oracle/admin$ mkdir -p PROD1/adump 2)创建数据文件目录 mkdir -p /dsg/oracle11/PROD1 二,创建参数文件和密码文件 这里,复制主库的参数文件和密码文件,参数文件稍作修改 [email protected] /dsg$ export O

数据库名(DB_NAME)、实例名(Instance_name)、以及操作系统环境变量(ORACLE_SID)

数据库名(DB_NAME).实例名(Instance_name).以及操作系统环境变量(ORACLE_SID) 在ORACLE7.8数据库中只有数据库名(db_name)和数据库实例名(instance_name).在ORACLE8i.9i中出现了新的参数,即数据库域名(db_domain).服务名(service_name).以及操作系统环境变量(ORACLE_SID).这些都存在于同一个数据库中的标识,用于区分不同数据库的参数. 一.什么是数据库名(db_name)? 数据库名是用于区分数据

JDBC连接SqlServer数据库(非默认实例)方法

一般我们在连接数据库的时候都是用的默认实例名,今天遇到了用非默认是实例名:连接代码如下(Java): URL=jdbc:microsoft:sqlserver://192.168.1.85//DEMO;DatabaseName=PePsiEasyData 说明: 192.168.1.85是数据库地址.不指定端口 //DEMO 指定实例名为DEMO 也可以写成这样: URL=jdbc:microsoft:sqlserver://192.168.1.85;instanceName=DEMO;Data

在数据库中更新虚拟机实例的任务状态为NULL

有时候一个实例一直卡死在一个任务状态上,不能再对此实例进行任何操作,这是需要在数据库中把这个虚拟机的任务状态改为NULL,修改方法如下: update instances set task_state=NULL whereuuid="5209f21b-b81e-4e19-8193-57263dc93dd7";        注:NULL值的两边是不用""括起来的. 在数据库中更新虚拟机实例的任务状态为NULL