第4章 存储过程与触发器

合集下载

网络数据库第4章触发器.ppt

网络数据库第4章触发器.ppt
[ { AND | OR } UPDATE ( column ) ...] } ]
SQL 语句
创建触发器注意事项
WITH ENCRYPTION:加密,不看看到原来的SQL脚本 FOR 或AFTER类型【后触发】:所有SQL语句都执行完且
执行成功的情况下才能执行触发器。可以在同一种操作上建 立多个触发器; INSTEAD OF类型【替代触发】:仅执行触发器本身,而不 执行引起触发操作的SQL语句。在同一种操作上只能建立一 个触发器。 在一个表上可以建立多个名称不同、类型各异的触发器,每 个触发器可由所有三个操作来引发。 大部分Transact-SQL语句都可用在触发器中,但所有的建立 和更改数据库以及数据库对象的语句、所有的DROP语句都 不允许在触发器中使用。 在触发器定义中,可以使用IF UPDATE子句来测试在 INSERT和UPDATE语句中是否对指定字段有影响。 通常不在触发器中返回任何结果。 在触发器中可使用特殊的二个表:INSERTED、DELETED
8.1 创建触发器
CREATE TRIGGER 触发器名称 ON {表名 | 视图名} [ WITH ENCRYPTION ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ]
[ DELETE ] [ , ] [UPDATE ] } AS [ { IF UPDATE ( column )
UPDATE 或 DELETE)允许采取多个不同的 对策以响应同一个修改语句。
触发器创建时包含的4个核心要素
指定触发器的名称。 指出触发器所作用的表。 指出引发触发器的操作: INSERT、
UPDATE 或 DELETE多个或者其中的一个。 编写SQL语句,实现触发器中腰完成的工作。

存储过程与触发器

存储过程与触发器

9.1.3
创建、执行、修改、删除简单存储过程
简单存储过程即不带参数的存储过程,下面介绍简单存储过程 的创建及使用。
1. 创建简单存储过程
在SQL Server中通常可以使用两种方法创建存储过程:一 种是使用企业管理器创建存储过程。另一种是使用查询分 析器执行SQL语句创建存储过程。创建存储过程时,需要注 意下列事项:
图9-1 创建存储过程的界面
(2)使用SQL语句创建存储过程。在查询分析器中,用SQL语 句创建存储过程的语法格式如下: CREATE PROC [EDURE] procedure_name [;number] [{@parameter data_type} [VARYING] [=default] [OUTPUT] ][,…n] [WITH {RECOMPLE|ENCRYPTION|RECOMPLE,ENCRYPTION}] [FOR REPLICATION] AS sql_statement [,…n] 其中: ● procedure_name是新建存储过程的名称,其名称必须遵 守标识符命名规则,且对于数据库及其所有者必须唯一。 ● number是可选的整数,用来对同名的过程分组,以便用一 条DROP PROCEDURE语句即可将同组的过程一起删除。例如, 名为order的应用程序使用的过程可以命名为orderproc1、 orderproc2、orderproc3。DROP PROCEDURE orderproc语句 将删除整个组。如果名称中包含定界标识符,则数字不应该包含 在标识符中,只应在存储过程名前后使用适当的定界符。
【例9.3】在查询分析器中执行ST_PRO_BJ。 代码如下: USE student EXECUTE ST_PRO_BJ GO 其执行结果如图9-2所示。

MySQL中的存储过程和触发器

MySQL中的存储过程和触发器

MySQL中的存储过程和触发器在MySQL数据库中,存储过程和触发器是两种非常有用的特性。

它们可以帮助开发人员简化数据库管理和提高应用程序的效率。

本文将深入探讨MySQL中存储过程和触发器的概念、用途以及如何创建和使用。

一、存储过程存储过程是一组预编译SQL语句的集合,可以使用输入参数,输出参数和返回值。

它们可以用于执行常见的数据库操作,如插入、更新和删除数据。

存储过程还可以用于实现业务逻辑,从而减少在应用程序中执行的SQL语句数量。

1.1 存储过程的优点- 提高性能:存储过程经过编译,可以使用缓存以提高查询性能。

- 简化管理:存储过程可以简化复杂的数据库管理操作,如维护数据库结构和数据安全。

- 实现业务逻辑:存储过程可以在数据库中实现业务逻辑,从而减少应用程序代码中执行的SQL语句的数量和复杂性。

1.2 存储过程的创建和使用在MySQL中创建存储过程需要使用CREATE PROCEDURE语句。

以下是一个简单的示例:```CREATE PROCEDURE get_customer(IN customer_id INT)BEGINSELECT * FROM customers WHERE id = customer_id;END;```在执行上述存储过程后,可以使用以下语句查询:```CALL get_customer(1);```1.3 存储过程的注意事项- 存储过程是在数据库服务器上执行的,因此需要一定的安全性考虑。

- 由于存储过程可以在数据库中执行大量计算,因此可能会影响服务器性能。

二、触发器触发器是一种特殊的存储过程,当特定事件发生时自动触发执行。

可以根据需要定义触发器在INSERT、UPDATE或DELETE操作之前或之后执行。

2.1 触发器的优点- 数据完整性:触发器可以防止对数据库中重要数据的误更改或误删除。

- 降低复杂性:使用触发器可以避免在应用程序中编写对数据库的复杂操作。

2.2 触发器的创建和使用在MySQL中创建触发器需要使用CREATE TRIGGER语句。

存储过程与触发器

存储过程与触发器
An Introduction to Database System
创建存储过程
定义存储过程的语法(SQL Server)
CREATE PROCEDURE 存储过程名 @参数1 数据类型 [= 默认值] [OUTPUT], …… , @参数n 数据类型 [= 默认值] AS SQL语句 参数可选 参数分为输入参数、输出参数 ( OUTPUT ) 输入参数允许有默认值
定义一个触发器,禁止在sc表中插入数据 create trigger sc_noinsert on sc for insert as raiserror('sc表禁止插入新数据',10,1) rollback tran
An Introduction to Database System
定义触发器时常用到两个临时表
带输出参数的存储过程
请创建存储过程,查看指定课程及格学生的成绩信息,并 返回及格的人数。 CREATE PROCEDURE proc_getPass @passSum int OUTPUT, @cno char(3), @passGrade int=60 AS select sno,grade from sc where cno=@cno and grade>= @passGrade ; select @passSum =count(*) from sc where cno=@cno and grade>= @passGrade ;
应权限的用户删除。 [例] 删除教师表Teacher上的触发器Insert_Sal DROP TRIGGER Insert_Sal;
An Introduction to Database System
第五章 数据库完整性

实训4:存储过程和触发器

实训4:存储过程和触发器

实训4:存储过程和触发器一、实训目的1、了解存储过程、触发器的概念。

2、会运用T-SQL语句创建存储过程、触发器。

2、掌握如何调用存储过程。

二、实训工具及设备1、实训软件:SQL Server。

2、实训设备:安装Windows系统计算机一台。

三、实训预备知识1、存储过程我们曾经学习过C语言的函数,使用函数时需要两步。

第一步:定义函数,它允许包含参数和返回值。

第二步:调用函数。

函数可以反复的调用,它方便了程序的模块化设计,大大提高了执行效率。

存储过程类似于C语言中的函数,它是存储在SQL SERVER服务器中的一组预编译过的SQL语句,当第一次调用以后,就驻留在内存中,以后调用时不必再进行编译,因此它的运行速度比独立运行同样的程序要快。

在SQL SERVER中存储过程分为两类:系统存储过程和用户自定义存储过程。

系统存储过程存储在master数据库中并以sp_为前缀(用户创建存储过程的时候不要以sp_为前缀),在任何数据库中都可以调用系统存储过程。

除了使用系统存储过程,用户还可以创建自己的存储过程。

当创建存储过程时,需要确定存储过程的三个组成部分:所有的输入参数及执行后的输出结果(返回值);∙返回给调用者的状态值,以指明调用是否成功。

使用T-SQL语句创建存储过程的语法格式如下:CREATE PROCEDUER 存储过程名[@参数1 参数的数据类型][=默认值] [OUTPUT],……[@参数n 参数的数据类型][=默认值] [OUTPUT]ASSQL语句其中:使用OUTPUT选项可将@参数的值返回给调用语句。

(1)创建不带参数的存储过程代码清单4-1:在选课系统(ElectiveSystem)数据库中创建每门选修课的平均分use ElectiveSystemgocreate procedure proc_courseAvgasselect courseName,avg(grade) as '平均成绩'from course,scwhere course.courseNo=sc.courseNogroup by course.courseNamego在查询分析器中调用存储过程proc_courseAvg,结果如下图4-1所示。

数据库中的触发器和存储过程

数据库中的触发器和存储过程

数据库中的触发器和存储过程触发器和存储过程是数据库中常用的两个概念,它们广泛应用于数据库管理系统中的数据处理和业务逻辑实现。

在本文中,我们将深入探讨数据库中的触发器和存储过程的定义、使用场景、优势和劣势等方面的内容。

触发器(Triggers)是一种特殊的数据库对象,是与表相关联的一段代码,该代码在表的插入、更新或删除时自动执行。

触发器可以用于保持数据的一致性、实现业务逻辑和安全性控制。

它的执行是自动的,不需要人为干预。

触发器可以在行级别或语句级别被触发执行。

行级触发器可以在表中的每一个被插入、更新或删除的行上自动执行一段代码。

而语句级触发器则在执行一条SQL语句的时候触发执行一段代码,不管SQL语句影响了多少行。

使用触发器可以实现复杂业务逻辑,如数据的自动更新、约束条件的检查和维护。

例如,在一个电商网站的订单表中,触发器可以根据库存量自动更新商品表的库存数量,保证库存和订单保持一致。

然而,触发器也存在一些缺点。

首先,触发器的执行是隐式的,可能会导致系统性能的下降。

因此,在设计数据库时需要谨慎地使用触发器,并对其性能进行评估和优化。

其次,触发器通常需要在数据库级别定义,这使得触发器的维护和管理变得更加复杂。

除了触发器,存储过程(Stored Procedures)也是数据库中常用的一种对象。

存储过程是一组预编译的SQL语句集合,可以在需要的时候被调用执行。

存储过程通常用于实现复杂的业务逻辑,包括数据处理、事务控制和查询等。

存储过程具有以下优势。

首先,存储过程可以减少网络传输的开销。

因为存储过程在数据库内部执行,不需要将大量的数据传输到客户端进行处理。

其次,存储过程可以提高数据库的性能和可维护性。

由于存储过程是经过编译的,其执行效率通常比客户端代码高。

同时,存储过程的代码存储在数据库中,可以被多个用户共享和重复使用。

存储过程广泛应用于复杂的数据处理和事务控制场景。

例如,在一个银行的数据库中,存储过程可以实现转账业务的处理,保证转账的原子性和一致性。

MYSQL触发器与存储过程

MYSQL触发器与存储过程

MYSQL触发器与存储过程MySQL是一个开源的关系型数据库管理系统,提供了许多强大的功能来处理数据。

其中,触发器和存储过程是两个重要的特性。

本文将对MySQL触发器和存储过程进行详细介绍。

##一、触发器触发器是MySQL提供的一种特殊的存储过程,它会在特定的数据库操作发生时自动触发执行。

触发器可以在以下几种事件发生时被激活执行:1.在插入数据到表中之前或之后,触发器会在插入操作之前(BEFORE)或之后(AFTER)执行。

2.在更新数据之前或之后,触发器可以在更新数据之前(BEFORE)或之后(AFTER)执行。

3.在删除数据之前或之后,触发器可以在删除数据之前(BEFORE)或之后(AFTER)执行。

触发器可以对所触发事件进行特定的处理操作。

比如,可以在数据插入之前对其进行验证、对插入的数据进行处理、记录数据库操作日志等。

###创建触发器要创建触发器,可以使用如下的语法:```sql```###删除触发器要删除触发器,可以使用如下的语法:```sqlDROP TRIGGER [IF EXISTS] [schema_name.]trigger_name```其中,`trigger_name`是要删除的触发器的名称,`schema_name`是要删除的触发器所在的数据库名称。

##二、存储过程存储过程是一组预先编译好的SQL语句集合,存储在数据库中,供应用程序调用执行。

存储过程可以接受参数,并返回结果。

存储过程可以包含条件语句、循环语句等,使得复杂的数据库操作可以更加方便地执行。

###创建存储过程要创建存储过程,可以使用如下的语法:```sqlCREATE PROCEDURE procedure_name ([IN , OUT , INOUT] parameter_name data_type [, ...])BEGIN--存储过程的具体执行内容END```其中,`procedure_name`是存储过程的名称,`parameter_name`是存储过程的参数名,`data_type`是参数的数据类型。

触发器与存储过程

触发器与存储过程

触发器与存储过程触发器(Trigger)是数据库中的一种特殊对象,它与一些特定的数据库事件相关联,并且当这个事件发生时,触发器可以在自动执行的过程中被触发。

而存储过程(Stored Procedure)则是一段预先编译好的SQL 语句的集合,它可以被保存在数据库服务器端,通过调用来执行。

触发器和存储过程都是数据库中的重要组件,它们都可以用于实现数据的自动化处理和一些复杂的业务逻辑。

但是它们在功能和使用方法上有一些不同之处。

首先,触发器的触发条件是事先设置好的,当该条件满足时才会被触发执行,而存储过程是主动调用执行的。

触发器通常与数据库中的表相关联,并且在表上的插入、更新或删除等事件发生时触发。

存储过程可以在任何时候被调用执行,无论是否有其他数据库事件发生。

其次,触发器通常用于实现数据的自动化处理,比如在插入新纪录时通过触发器自动计算一些字段的值,或者在删除记录时触发器做一些相关操作。

而存储过程则更倾向于实现业务逻辑的封装和复用,比如在一个库存管理系统中,可以使用存储过程来实现添加商品、修改商品信息、删除商品等操作。

此外,触发器由数据库引擎直接管理,它是与数据库表密切相关的一种对象,所以当表被删除或者修改时,相关联的触发器也会相应地被删除或修改。

而存储过程则是作为独立于表的对象存在,当数据库表被删除或修改时,存储过程不受影响。

在使用上,触发器和存储过程都可以用于实现一些相同的功能,但触发器更适合于在特定的数据库事件发生时执行自动化的操作,而存储过程更适合于实现复杂的业务逻辑和一些需要主动调用的场景。

总之,触发器和存储过程都是数据库中的重要组件,它们可以用于实现一些自动化的处理和复杂的业务逻辑。

它们在功能和使用方法上有一些不同之处,需要根据具体的需求来选择和使用。

SQL课件 存储过程和触发器

SQL课件  存储过程和触发器
上 ) ,实际上是事务日志的视图,它们与创建了触发器的表 有着相同的结构。
返回 上页
10.5
10.5.1
触发器设计规则
确定触发器的种类
首先用户应根据相应的触发事件确定到底是DML触发器还 是DDL触发器,如果是DML触发器,用户在要根据数据操作类 型确定是INSERT、UPDATE还是DELETE触发器,然后再根据约 束规则,是希望触发事件发生后还是发生前来触发执行触发 器,从而确定是AFTER还是INSTEAD OF类型的触发器。 对于 DDL 触发器,它只有 AFTER 一种类型,只需根据触发 事件的类型确定触发器,来做出相应的响应。
返回 上页
10.3.5
删除存储过程
如果一个存储过程不再需要,用户就可以删除它,但是 如果此存储过程有关联存储过程调用,系统会返回错误信息。 但是删除存储过程后,用户重新定义的同名称同参数的存储 过程可以被原来关联的对象使用。
删除存储过程的Transact-SQL语法结构为:
DROP PROCEDURE { [ schema_name. ] procedure } [ ,...n ]
返回 上页
10.4.2
触发器的种类
1. DML触发器 DML触发器是在执行数据操作语言事件时被调用的触发 器,其中数据操作语言事件包括:INSERT、UPDATE和DELETE 语句。触发器中可以包含复杂的Transact-SQL语句,触发器 整体被看作一个事务,可以回滚。 2. DDL触发器 与DML触发器类似,与DML不同的是,它相应的触发事件 是由数据定义语言引起的事件,包括: CREATE 、 ALTER 和 DROP 语句, DDL 触发器用于执行数据库管理任务,如调节和 审计数据库运转。 DDL 触发器只能在触发事件发生后才会调 用执行,即它只能是AFTER类型的。

存储过程和触发器讲解

存储过程和触发器讲解

存储过程和触发器存储过程和触发器是SQL Server的数据库对象。

使用存储过程可以提高应用程序的效率。

触发器可以大大增强应用程序的健壮性、数据库的可恢复性和可管理性。

一、存储过程存储过程是一组T-SQL语句,它们只需编译一次,以后即可多次执行。

存储过程是在SQL Server中定义的子过程,是数据库对象之一。

存储过程可以执行范围很宽的各种操作与业务功能。

比如可以插入、更新或删除表中的数据。

通过传递参数值,存储过程可以判断是选择数据还是执行其他操作。

由于存储过程可以接受输入参数并以输出参数的格式向调用过程或批处理返回多个值;存储过程是包含用于在数据库中执行操作(包括调用其他过程)的编程语句。

此外存储过程可以向调用过程或批处理返回状态值,以指明成功或失败(以及失败的原因)。

故SQL Server 中的存储过程与其他语言中的过程(有时也称:函数)类似。

可以使用 T-SQL EXECUTE 语句来运行存储过程。

存储过程作为 SQL Server 数据库系统中很重要的概念之一,合理的使用存储过程,可以有效地提高程序的性能;并且将商业逻辑封装在数据库系统中的存储过程中,可以大大提高整个软件系统的维护性。

当商业逻辑发生了改变的时候,不再需要修改并编译客户端的应用程序以及重新分发它们到为数众多的用户手中,只需要修改位于服务器端的实现相应商业逻辑的存储过程即可。

使用 SQL Server 创建应用程序时,T-SQL编程语言是应用程序和 SQL Server 数据库之间的主要编程接口。

使用T-SQL程序时,可用两种方法存储和执行程序;一种是将程序存储在本地,然后创建向SQL Server发送命令并处理结果的应用程序;另一种是将程序作为存储过程存储在SQL Server中,然后创建执行过程并处理结果的应用程序。

在SQL Server中使用存储过程而不使用存储在客户端计算机本地的T-SQL程序,原因在于存储过程具有以下的好处:✓存储过程已在服务器注册。

MySQL中的触发器和存储过程详解

MySQL中的触发器和存储过程详解

MySQL中的触发器和存储过程详解MySQL是一种常用的关系型数据库管理系统,它支持多种高级功能,其中包括触发器和存储过程。

在本文中,将详细讨论MySQL中的触发器和存储过程,并解释它们的作用和用法。

一、触发器的概念和作用1.触发器的概念触发器是MySQL中一个非常强大和灵活的特性,它允许在表中的数据发生某些特定的事件时自动执行一些操作。

这些事件可以是插入、更新或删除数据等。

触发器可以用于检查数据的完整性、实现业务规则、触发其他操作等。

2.触发器的作用触发器可以极大地简化数据库的管理和维护工作,并提高系统的安全性和完整性。

通过使用触发器,可以在数据库中实现复杂的业务逻辑,并确保数据的一致性和正确性。

触发器还可以对数据进行约束和验证,以确保数据库中的数据满足特定的条件。

二、触发器的语法和用法1.创建触发器创建触发器使用CREATE TRIGGER语句,语法如下:```sqlCREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_body```- trigger_name:触发器的名称,可以自由命名,但必须唯一。

- trigger_time:触发器的时间,可以是BEFORE或AFTER。

- trigger_event:触发器的事件,可以是INSERT、UPDATE或DELETE。

- table_name:触发器所属的表名。

- trigger_body:触发器的执行体,可以是一段SQL代码或调用存储过程等。

2.触发器的执行时机和事件触发器可以在数据发生变化之前(BEFORE)或之后(AFTER)执行,并可以针对INSERT、UPDATE或DELETE等事件进行触发。

通过指定不同的触发时机和事件,可以实现不同的功能。

3.触发器的执行体触发器的执行体可以是一段SQL代码,用来实现特定的业务逻辑。

数据库的存储过程和触发器

数据库的存储过程和触发器

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

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。

用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

一、存储过程介绍存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。

在ORACLE中,若干个有联系的过程可以组合在一起构成程序包。

存储过程是利用SQL Server所提供的Tranact-SQL语言所编写的程序。

Tranact-SQL语言是SQL Server提供专为设计数据库应用程序的语言,它是应用程序和SQL Server数据库间的主要程序式设计界面。

它好比Oracle数据库系统中的Pro-SQL和Informix的数据库系统能够中的Informix- 4GL语言一样。

这类语言主要提供以下功能,让用户可以设计出符合引用需求的程序:1)、变量说明2)、ANSI兼容的SQL命令(如Select,Update….)3)、一般流程控制命令(if…else…、while….)4)、内部函数二、使用存储过程有以下的优点:* 存储过程的能力大大增强了SQL语言的功能和灵活性。

存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

* 可保证数据的安全性和完整性。

# 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。

第四章T-SQL语言、存储过程触发器例题

第四章T-SQL语言、存储过程触发器例题

第四章T-SQL语言部分例题【例4-13】创建一个只有一个主数据文件SchoolTest(不指定该文件的大小)的数据库。

CREATE DATABASE SchoolTestON(NAME=SchoolTest_Data,FILENAME='D:\SchoolTest_Data.MDF')【例4-14】建立学生表T_StudentTest。

CREATE TABLE T_StudentTest (StudentCode CHAR(8) NOT NULL UNIQUE, /*唯一性约束,不许取空值*/StudentName V ARCHAR(16) NOT NULL,Sex CHAR(2) NOT NULL,LiveInDorm BIT DEFAULT 1, /*默认值为1*/Constraint StudentPK Primary Key(StudentCode) /* StudentCode为主键约束*/ )【例4-15】建立成绩表T_GradeTest。

CREATE TABLE T_GradeTest(StudentCode CHAR(8) NOT NULL , /*不许取空值*/Grade REAL DEFAULT 0 , /*默认值为0*/Constraint GradeCK Check(Grade>=0 AND Grade<=100)/*检查约束0>= Grade<=100*/)【例4-16】删除T_GradeTest表DROP TABLE T_GradeTest【例4-17】在T_Student表的姓名(StudentName)字段上建立升序索引。

CREATE INDEX NameIndex on T_Student (StudentName)【例4-18】在T_Student表的学号(StudentCode)字段上建立唯一降序索引。

CREATE UNIQUE INDEX StudentCodeIndex on T_Student (StudentCode DESC)【例4-19】删除T_Student表中索引名称分别为NameIndex和StudentCodeIndex的两个索引。

存储过程和触发器

存储过程和触发器
2、自定义一个函数实现求所有图书的平均价钱。然后调
用该函数求出所有图书的平均价钱。
3、自定义一个函数实现求每一个出版社的图书平均价钱。 然后调用该函数求某一出版社的平均定价。
参考答案
1、DECLARE @count int SELECT @count = count(*) FROM 图书 SELECT sum(定价) / @count AS 平均定价 FROM 图书 2、CREATE FUNCTION avgPrice() RETURNS real BEGIN DECLARE @avgprice real SET @avgprice = (SELECT avg(定价) FROM 图书) RETURN @avgprice END SELECT dbo.avgPrice() AS 平均定价 3、CREATE FUNCTION publishAvgPrice(@publish AS char(10)) RETURNS real BEGIN DECLARE @avgprice real SET @avgprice = (SELECT avg(定价) FROM 图书 WHERE 出版社 = @publish GROUP BY 出版社) RETURN @avgprice END DECLARE @publish char(10) SET @publish = '高等教育' SELECT dbo.publishAvgPrice(@publish) AS 平均定价
使用游标修改数据表:
使用游标修改数据表,在声明游标时应该指出UPDATE 哪些字段,如果UPDATE后没有OF,则表明所有字段可 以更新。
更新的语法格式:
UPDATE 表 SET 字段名 = 值
WHERE CURRENT OF

触发器与存储过程

触发器与存储过程

4.2 触发器
‫ ٭‬4.2.1 创建触发器
‫ ٭‬4.2.2 删除与查看触发器
‫ ٭‬4.2.3 触发器实现CHECK、级联
第2页
★数据库技术与应用★
第四章 MYSQL触发器与存储过程
4.1 存储过程和函数
存储程序和函数是事先经过编译并存储在数据库中的一套 SQL语句。创建后,客户端不需要再重新发布单独的语句,而 是可以引用存储程序来替。存储程序可以提供改良后的性能, 因为只有较少的信息需要在服务器和客户算之间传送,代价是 增加数据库服务器系统的负荷。存储程序也允许你在数据库服 务器上有函数库,从而提高了开发人员的开发效率。
当在定义体中指明返回的结果。调用函数不能使 用CALL语句,函数可直接使用。
第5页
★数据库技术与应用★
第四章 MYSQL触发器与存储过程
存储过程或函数基本语法
CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body
第10页
★数据库技术与应用★
第四章 MYSQL触发器与存储过程
存储过程或函数说明
过程体说明:
‫ ٭‬MySQL允许子程序包含DDL语句,如CREATE和DROP。MySQL 也允许存储程序(但不是存储函数)包含SQL 交互select语句。
‫ ٭‬存储函数不可以包含那些做明确的和绝对的提交或者做回滚的语。 ‫ ٭‬存储子程序不能使用LOAD DATA INFILE。 ‫ ٭‬返回结果包的语句不能被用在存储函数中。 ‫ ٭‬其它语句:块语句、选择、循环等等
第3页
★数据库技术与应用★
第四章 MYSQL触发器与存储过程

第4章 存储过程和触发器

第4章 存储过程和触发器
create procedure customer_quantity @customerid char(10),@orderdate datetime as select productid,sum(quantity)total from orderdetails ,orders
where orderdate<@orderdate and customerid=@customerid group by productid exec customer_quantity 'warth','1996-1-10'
exec customer default,@orderdate='1997-7-1'
存储过程的创建
例:编写一存储过程,用于统计顾客在商店内订货次数。( northwind 数据库)
create procedure ordercount @customerid char(10), @ordercount integer output
存储过程的创建
1 创建存储过程的格式 CREATE PROCEDURE 存储过程名 [{@参数名 数据类型}[=default][OUTPUT] ][,…n] [With {recompile|encryption|recompile,encryption}] AS SQL语句
存储过程名:必须符合标识符命名规则; 编号:可选整数,用于对同名的存储过程分组,以便用一条drop
存储过程的创建
例:编写一存储过程,实现查询顾客某一日期后所订购的货物及其总量(northwind 数据库)
创建存储过程: create table customer (customerid char(10),address char(20))
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2页
2015年5月17日
本章要点




存储过程的特点、类型和作用 使用CREATE PROCEDURE语句创建存储过程 存储过程的执行方式 DML触发器的特点和创建方式 DML触发器的工作原理 使用CREATE TRIGGER语句创建DML触发器 DDL触发器的特点和创建方式
பைடு நூலகம்
2015年5月17日
第4章 存储过程和触发器
本章概述 本章要点 本章内容
2015年5月17日
第1页
本章概述


如何提高Transact-SQL语句的执行效率呢?如何 加强数据库中数据完整性的机制呢?这些问题的 解决都依赖于数据库的编程对象。典型的数据库 编程对象包括视图、存储过程、触发器、函数等。 存储过程是一个可重用的代码模块,可以高效率 地完成指定的操作。触发器是一种特殊类型的存 储过程,可以实现自动化的操作。 本章将全面研究存储过程、触发器特点和使用方 式。
例:查询dbo架构中的student表的列信息。 sp_columns student,dbo,database_demo
13. sp_databases 列出驻留在 SQL Server 2005 数据库引擎实 例中的数据库或可以通过数据库网关访问 的数据库。
14. sp_fkeys 返回当前环境的逻辑外键信息。该过程显示各种外键关系,包括禁用的外键。 语法: sp_fkeys [ @pktable_name = ] 'pktable_name' [ , [ @pktable_owner = ] 'pktable_owner' ] [ , [ @pktable_qualifier = ] 'pktable_qualifier' ] { , [ @fktable_name = ] 'fktable_name' } [ , [ @fktable_owner = ] 'fktable_owner' ] [ , [ @fktable_qualifier = ] 'fktable_qualifier' ] 参数: [ @pktable_name = ] 'pktable_name':带主键的表的名称。不支持通配符模式匹配。必须提供该参数或fktable_name 参数,或二者都提供。 [ @pktable_owner = ] 'pktable_owner':表(带主键)的所有者的名称。不支持通配符模式匹配。 在 SQL Server 中,如果当前用户拥有具有指定名称的表,则返回该表的列。如果未指定 pktable_owner,并且当前用 户没有具有指定名称 pktable_name 的表,则此过程将查找由数据库所有者拥有并具有指定名称 pktable_name 的 表。如果有,则返回该表的列。 [ @pktable_qualifier = ] 'pktable_qualifier':表(带主键)限定符的名称。在 SQL Server 中,限定符表示数据库名称 。在某些产品中,该列表示表所在数据库环境的服务器名。 [ @fktable_name = ] 'fktable_name':表(带外键)的名称。不支持通配符模式匹配。必须提供该参数或 pktable_name参数,或二者都提供。 [ @fktable_owner = ] 'fktable_owner':用于表(带外键)的所有者的名称。不支持通配符模式匹配。 [ @fktable_qualifier =] 'fktable_qualifier':在 SQL Server 中,限定符表示数据库名称。在某些产品中,该列表示表 所在数据库环境的服务器名。
12. sp_columns 返回当前环境中可查询的指定表或视图的列信息。 语法: sp_columns [@table_name=]object [ ,[@table_owner=]owner] [ , [ @table_qualifier = ] qualifier ] [ , [ @column_name = ] column ] [ , [ @ODBCVer = ] ODBCVer ] 参数: [ @table_name =] object:用于返回目录信息的表或视图的名称。支持通配符模式匹配。 [ @table_owner =] owner:用于返回目录信息的表或视图的对象所有者。支持通配符模式匹配。如果 未指定 owner,则是默认表或视图可见性规则。 如果当前用户拥有的表或视图具有指定名称,则返回该表的列。如果未指定 owner,并且当前用户不拥 有具有指定 object 的表或视图,则 sp_columns 将搜索数据库所有者所拥有的具有指定 object 的表或视图。如果有,则返回该表的列。 [ @table_qualifier =] qualifier:表或视图限定符的名称。在 SQL Server 中,此列表示数据库名称。 在某些产品中,该列表示表所在数据库环境的服务器名。 [ @column_name =] column:一个单独的列,当只需要目录信息的一列时可使用该参数。如果未指 定column,则返回所有列。支持通配符模式匹配。 [ @ODBCVer =] ODBCVer:当前使用的ODBC版本。
7. sp_helptext 显示用户定义规则的定义、默认值、未加密的 Transact-SQL 存储过程 、用户定义 Transact-SQL 函数、触发器、计算列、CHECK 约束、 视图或系统对象(如系统存储过程)。 语法: sp_helptext [ @objname = ] 'name' [ , [ @columnname = ] computed_column_name ] 参数: [@objname=]'name':架构范围内的用户定义对象的限定名称和非限定 名称。仅当指定限定对象时才需要引号。如果提供的是完全限定名称 (包括数据库名称),则数据库名称必须是当前数据库的名称。对象 必须在当前数据库中。name 的数据类型为 nvarchar(776),无默认 值。 [ @columnname = ] 'computed_column_name':要显示其定义信息 的计算列的名称。
2. sp_helpdb 报告有关指定数据库或所有数据库的信息。 语法: sp_helpdb [ [ @dbname= ] 'name' ] [ @dbname = ] 'name':要报告其信息的数 据库的名称。如果未指定 name,则 sp_helpdb将报告sys.databases目录视图 中所有数据库的信息。
4. sp_helpfilegroup 返回与当前数据库相关联的文件组的名称及属性。 语法: sp_helpfilegroup [ [ @filegroupname = ] 'name' ] [ @filegroupname = ] 'name':当前数据库中任 意文件组的逻辑名称。如果没有指定 name,则 列出当前数据库中的所有文件组并只显示在结果 集部分中显示的第一个结果集。
例1:查看函数multisql_tablevalued_func 信息。 sp_helptext multisql_tablevalued_func 例2:查看表grade_zcj的计算列“总成绩” 信息。 sp_helptext 'grade_zcj','总成绩'
8. sp_helptrigger 返回对当前数据库的指定表定义的 DML 触发器的类型 .sp_helptrigger不能用于 DDL 触发器。 语法: sp_helptrigger [ @tabname = ] 'table' [ , [ @triggertype = ] 'type' ] 参数: [ @tabname = ] 'table':当前数据库中将为其返回触发器信 息的表的名称。 [ @triggertype = ] 'type':将为其返回有关信息的DML触发 器的类型。可以是DELETE、INSERT、UPDATE。
3. sp_helpfile 返回与当前数据库关联的文件的物理名称及属性。 使用此存储过程确定附加到服务器或从服务器分 离的文件名。 语法: sp_helpfile [ [ @filename = ] 'name' ] [ @filename = ] 'name'是当前数据库中任意文件的 逻辑名称。如果未指定 name,则返回当前数据 库中所有文件的属性。
2015年5月17日
第6页
系统存储过程
系统存储过程是方便查询系统信息或完成系统管理 任务,一般以sp_开头,并存放在sys架构中。 常用的系统存储过程有: 1.Sp_help 报告有关数据库对象(sys.sysobjects 兼容视图中 列出的所有对象)、用户定义数据类型或某种数 据类型的信息。 语法: sp_help [ [ @objname = ] 'name' ] [ @objname =] 'name':某个对象的名称。
11. sp_who 提供有关 Microsoft SQL Server 数据库引擎实例中的当前用户、会话 和进程的信息。可以筛选信息以便只返回那些属于特定用户或特定会 话的非空闲进程。 语法: sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ] 参数[ @loginame = ] 'login' | session ID | 'ACTIVE'用于筛选结果集。 login用于标识属于特定登录名的进程。 session ID是属于 SQL Server 实例的会话标识号。 ACTIVE 排除正在等待用户发出下一个命令的会话。 如果没有提供任何值,则过程报告属于实例的所有会话。
相关文档
最新文档