第6章 Transact-SQL简介、存储过程和触发器
- 格式:ppt
- 大小:194.50 KB
- 文档页数:51
MySQL中的触发器和存储过程的区别与用途MySQL是一种常用的关系型数据库管理系统,广泛应用于各种互联网应用中。
在MySQL中,触发器(Trigger)和存储过程(Stored Procedure)是两种常见的编程方式,用于实现数据库操作的自动化和业务逻辑的封装。
本文将探讨MySQL中的触发器和存储过程的区别和用途。
一、触发器触发器是MySQL中一种特殊的数据库对象,它和数据库表关联,并在表中的指定事件发生时自动执行特定的操作。
触发器是基于事件驱动的,它可以在数据插入、更新或删除时触发执行相应的操作。
1. 触发器的创建在MySQL中,创建触发器需要使用CREATE TRIGGER语句,并指定触发时机、触发事件、触发操作和触发操作所执行的SQL语句。
例如,我们可以创建一个在数据插入前触发的触发器如下所示:```CREATE TRIGGER before_insert_triggerBEFORE INSERT ON table_nameFOR EACH ROWBEGIN-- 触发操作所执行的SQL语句...END;```2. 触发器的用途触发器可以用于各种场景,例如数据自动更新、数据约束、数据一致性等。
下面以一个实例来说明触发器的用途。
假设我们有一个订单表和一个库存表,每当有订单数据插入时,我们希望自动更新库存表中对应商品的库存数量。
这时,就可以使用触发器实现该功能。
```CREATE TRIGGER update_inventoryAFTER INSERT ON ordersFOR EACH ROWBEGINUPDATE inventorySET quantity = quantity - NEW.amountWHERE product_id = NEW.product_id;END;```在上述示例中,我们创建了一个名为update_inventory的触发器,它在订单表插入数据后触发,然后执行更新库存表的操作。
一、什么是transaction-sql语句Transaction-SQL语句是用于管理数据库事务的一种结构化查询语言。
事务是指一系列数据库操作,要么全部执行成功,要么全部执行失败,以保证数据的一致性和完整性。
Transaction-SQL语句提供了一种方式来管理这些事务操作,包括开始事务、提交事务和回滚事务等。
二、 Transaction-SQL语句的常用操作1. 开始事务(BEGIN TRANSACTION)- 用于标识事务的开始,将数据库操作置于一个事务中。
2. 提交事务(COMMIT TRANSACTION)- 用于提交已经执行的事务操作,表示事务执行成功。
3. 回滚事务(ROLLBACK TRANSACTION)- 用于撤销一系列数据库操作,回到事务开始之前的状态。
4. 保存点(SAVEPOINT)- 用于在事务中创建一个保存点,可以在事务回滚时回到保存点的状态。
5. 设置事务隔离级别(SET TRANSACTION ISOLATION LEVEL)- 用于设置事务的隔离级别,控制并发事务对数据的访问方式。
三、 Transaction-SQL语句的应用场景1. 复杂的数据操作- 包括更新、插入、删除等操作,需要保证一系列操作的一致性和完整性。
2. 并发事务控制- 多个用户对同一数据进行操作时,需要确保数据的并发访问不会导致数据的损坏或丢失。
3. 数据回滚- 当数据库操作发生错误或者执行结果不符合预期时,可以通过回滚事务来撤销已经执行的操作。
4. 事务隔离- 控制事务对数据的访问权限,保证事务的独立性和隔离性。
四、 Transaction-SQL语句的编写和优化1. 基本语法- 了解事务的基本操作语句和语法规则,包括BEGIN TRANSACTION、COMMIT TRANSACTION、ROLLBACK TRANSACTION等。
2. 逻辑严谨- 编写事务时要确保逻辑的严谨性,避免出现死锁、脏读等并发问题。
SQL Server基本知识点_简答第1章数据库技术基础一、数据管理技术的发展历程P2-41、人工管理阶段:应用程序完全依赖数据,并且数据大量重复存放。
但是数据不独立、不共享、不保存。
2、文件系统管理阶段:数据与应用程序分离,数据独立存放在数据文件中,数据可以反复使用和保存。
应用程序通过文件系统与数据文件发生联系,但数据共享性差,冗余度大,无集中管理。
3、数据库系统管理阶段:对所有数据实行统一规划管理,数据按一定的结构组织在一起,数据和应用程序独立。
数据库中数据能够满足所有用户的不同要求,减少了数据存储冗余、实现数据共享、保障数据安全及高效检索和处理数据。
二、数据库系统的组成P7-9数据库系统是一个安装了数据库管理系统和数据库的计算机系统,用来组织、存储和处理大量的数据信息。
主要包括:计算机系统(硬件和基本软件)、数据库管理系统、数据库、应用程序系统、使用和维护数据库的用户(数据库管理员、应用设计人员、最终用户等)。
三、数据库系统的三级模式体系结构P10-11数据库系统的三级模式由外模式、概念模式(简称模式)和内模式以及2个映射(内模式——模式映射和模式——子模式映射)组成。
1、外模式:又称子模式,是某个或某几个用户所看到的数据库的数据视图(外部视图),由对用户数据文件的逻辑结构描述以及和全局视图中文件对应关系的描述组成。
外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分数据。
一个子模式可以由多个用户共享,而一个用户只能使用一个子模式。
2、模式:又称概念模式或逻辑模式,是综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述以及存储视图中文件对应关系的描述,是所有用户的公共数据视图(全局视图)。
3、内模式:又称存储模式,由对存储视图中全体数据文件的存储结构的描述和对存储介质参数的描述组成,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存介质上的数据库。
有教师表 (教师号,教师名,职称,基本工资 ) ,其中基本工资的取值与教师职称 有关。
实现这个约束的可行方案是 ( ) 。
A 在教师表上定义一个视图B 在教师表上定义一个存储过程C 在教师表上定义插入和修改操作的触发器D 在教师表上定义一个标量函数参考答案C在SQL SERVE 中,执行带参数的过程,正确的方法为()A 过程名 参数B 过程名(参数)C 过程名 =参数D ABC 匀可参考答案A在SQL SERVE 服务器上,存储过程是一组预先定义并( Transact-SQL 语句。
A 保存B 解释C 编译D 编写 参考答案 C在 SQL Server 中,触发器不具有(A INSERT 触发器B UPDATE* 发器C DELETE 发器D SELECT 触发器 参考答案 D)的 )类型( )允许用户定义一组操作,这些操作通过对指定的表进行删除、插入和更新命令来执行或触发。
A存储过程B规则C触发器D索引参考答案C为了使用输出参数,需要在CREATPROCEDU语句中指定关键字( )A OPTIONB OUTPUTC CHECKD DEFAULT 参考答案B)语句用于创建触发器A CREATE PROCEDUREB CREATE TRIGGERC ALTER TRIGGERD DROP TRIGGER参考答案B下列()语句用于删除触发器。
A CREATE PROCEDUREB CREATE TRIGGERC ALTER TRIGGERD DROP TRIGGER 参考答案D)语句用于删除存储过程A CREATE PROCEDUREB CREATE TABLEC DROP PROCEDURED其他参考答案C下列()语句用于创建存储过程A CREATE PROCEDUREB CREATE TABLEC DROP PROCEDURED其他参考答案Asp_help属于哪一种存储过程()?A系统存储过程B用户定义存储过程C扩展存储过程D其他参考答案A以下语句创建的触发器是当对表A进行()操作时触发CREATE TRIGGER ABC ON 表AFOR INSERT, UPDATE, DELETEASA只是修改B只是插入C只是删除D修改,插入,删除参考答案D()允许用户定义一组操作,这些操作通过对指定的表进行删除、或触发。
实验六存储过程和触发器1.实验目的(1) 掌握存储过程和触发器的基本概念和功能(2) 掌握创建,管理存储过程的方法(3) 掌握创建,管理触发器的方法2.实验内容及步骤(1) 利用SQL Server Management Studio创建一个存储过程ProcNum,查询每个班级中学生的人数,按班级号升序排序.在查询编辑器的存储过程模板中输入如下创建存储过程的代码并执行.USE teachingGOCREATE PROCEDURE ProcNum ASSELECT classno,COUNT(*)AS number FROM studentGROUP BY classno ORDER BY classno ASCGOEXEC ProcNum(2) 利用Transact-SQL语句创建一个带有参数的存储过程ProcInsert,向score 表插入一条选课记录,并查询该学生的姓名,选课的所有课程名称,平时成绩和期末成绩.<1> 在查询编辑器输入如下创建存储过程的代码并执行.USE teachingGOCREATE PROCEDURE ProcInsert(@sno NCHAR(10),@cno NCHAR(6),@usually NUMERIC(6,2),@final NUMERIC(6,2))ASINSERT INTO score VALUES (@sno,@cno,@usually,@final)SELECT sname,cname,usually,finalFROM student s,course c,score scWHERE s.studentno=sc.studentno and c.courseno=sc.courseno and s.studentno=@sno<2> 调用存储过程ProcInsert,向score表插入一条选课记录.DECLARE@AVERAGE NUMERIC(6,2)EXEC ProcInsert'16135222201','c05103',88,90(3) 利用Transact-SQL语句创建一个存储过程ProcAvg,查询指定班级指定课程的平均分。
存储过程需要单独执行;函数可以随处调用。
存储过程是保存起来的可以接受和返回用户提供的参数的Transact-SQL 语句的集合。
可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。
也可以创建在Microsoft® SQL Server™ 启动时自动运行的存储过程。
用户定义函数,它是返回值的已保存的Transact-SQL 例程。
用户定义函数不能用于执行一组修改全局数据库状态的操作。
与系统函数一样,用户定义函数可以从查询中唤醒调用。
也可以像存储过程一样,通过 EXECUTE 语句执行。
本质上没区别。
只是函数有如:只能返回一个变量的限制。
而存储过程可以返回多个。
而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。
执行的本质都一样。
函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少由于我现在基本上是DBA的工作,因此平时也看一些数据库方面的书籍。
但是我一直对存储过程和函数之间的区别掌握不透。
我向来认为存储过程可以实现的操作,函数也一样可以实现。
最近,刚好大学的老师给我们上SQL-Server的课程,我对这个问题的疑惑终于慢慢解开。
今天晚上顺便看了些网上的资料,觉得以下分析比较合理:1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
3. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
4. 当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。