数据库存储过程和触发器

存储过程
是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。 
可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 
可以在单个存储过程中执行一系列 SQL 语句。
可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。

触发器
是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。例如,可以控制是否允许基于顾客的当前帐户状态插入定单。
触发器还有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。有关详细信息,请参见表关系。

使用触发器的优点
触发器的优点如下: 
触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。
触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。
触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles 表中)应用折扣(存储在 discounts 表中)的更新。

时间: 2024-12-16 22:23:46

数据库存储过程和触发器的相关文章

15-07-22 数据库--存储过程、触发器

select * from fruit select * from Login select * from OrderDetails select * from Orders select * from info select * from Family go --存储过程,实现用户购买水果的操作,要判断购买数量和库存之间的关系,购买总价和余额之间的关系,如果购买成功修改4个表 create procedure buyfruit --创建一个存储 --定义参数,参数之间用逗号隔开 @uid va

数据库存储过程、触发器、连接

存储过程:存储过程就是编译好了的一些sql语句.1.存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快.2. 可保证数据的安全性和完整性.通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全.通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性.3.可以降低网络的通信量.存储过程主要是在服务器上运行,减少对客户机的压力.4:存储过程可以接受参数.输出参数.返回单个或多个结果集以及返回值.可以向程序返回错误原因5:存储过程可以包含程序流.逻辑以及对数

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

一.变量那点事儿 1.1 局部变量 (1)声明局部变量 DECLARE @变量名 数据类型 DECLARE @name varchar(20) DECLARE @id int (2)为变量赋值 SET @变量名 =值 --set用于普通的赋值 SELECT @变量名 = 值 --用于从表中查询数据并赋值,,可以一次给多个变量赋值 SET @name=‘张三’ SET @id = 1 SELECT @name = sName FROM student WHERE sId=@id (3)输出变量的值

查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数

查询SQLServer2005中某个数据库中的表结构.索引.视图.存储过程.触发器以及自定义函数 2013-03-11 09:05:06|  分类: SQL SERVER|举报|字号 订阅 (1)查询SQLServer2005中某个数据库中的表结构 SELECT TOP 100 PERCENT --a.id,CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名,CASE WHEN a.colorder = 1 THEN isnull(f.v

Oracle数据库基本操作五——存储过程与触发器

  4. 存储过程与触发器: 例7-1: (存储过程) 创建一个显示学生总人数的存储过程. set serveroutput on create or replace procedure student_count as p1 number(3); begin select count(*) into p1 from student; dbms_output.put_line('学生总人数是:'||p1); end; / execute student_count(); 例7-2: (存储过程)

SQLserver 数据库的索引,存储过程和触发器的使用与概念

前言:索引,存储过程和触发器可以对一些高级的数据处理和查询,从而更好的实现对数据库的操作,诊断和优化. 一.索引 索引提供指针以指向存储在表中指定的数据值,数据库的索引,就好比一本书中的目录类似,无需阅读整个一本书,利用目录就可以快速的查找所需信息.在数据库中,索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需数据.通过使用索引,可以大大提高数据库的查询速度 (1) 索引分类 1.唯一索引 唯一索引不允许两行具有相同索引值 2.主键索引 在数据库关系图中为表定义一个主键将自动创建主键索引

存储过程和触发器——MySQL

从MySQL5.0版本开始就对存储过程和触发器进行了支持,在MySQL进行学习前,先查看您所使用的版本吧,方法有: 1.$mysql -V  //linux终端下 2.select version();  //mysql下 3. mysql --help | grep Distrib  //linux终端下 在了解您所使用的版本支持情况下再下一步 存储过程  sql语句执行的时候要先编译,然后执行.存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数

数据库后台优化——触发器

为了保证数据库的完整性和一致性,很多的时候需要执行多条sql语句才能达到想要的目的. 在一对多的数据库关系中,比如卡号类别与卡号之间的关系.如果要取消某个类别的时候,就要连同齐下的所有卡号都删除.在现实中,注册的时候一般都会进行充值,当我想card表里面写东西的时候,就要向recharge表里面写一条充值记录.完成这两个操作才算完成这个功能的实现. 对于以上的需求,每个功能的实现 都伴随着多条sql语句的执行. 为了解决上面的问题,一共有两种解决方法.一是存储过程,二是触发器.上篇博客中已经讲解

MSSQL 事务,视图,索引,存储过程,触发器

事务 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.这特别适用于多用户同时操作的数据通信系统.例如:订票.银行.保险公司以及证券交易系统等. 如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库的永久组成部分,如果事务遇到错误且必须取消或回滚,则所有数据修改均会被清除. 开始事务 BEGIN TRANSACTION 提交事务 COMMIT TRANSACTION 回