SQL数据库应用(第十章)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

法。
wk.baidu.com
10.4 锁
SQL Server能自动发现并解除死锁。 在并发操作中,为了避免死锁,建议采用以下措施。 (1)最大限度地减少保持事务打开的时间长度。 (2)按同一顺序访问对象。 (3)尽量避免事务中的用户交互。 (4)保持事务简短并在一个批处理中。
本章小结
存储过程是一种数据库对象,是存储在服务器上的一组预定义的SQL 语句集合。 创建存储过程并将编译好的版本存储在高速缓存中,可以加快程序的 执行效率。 存储过程可以有输入、输出参数,可以返回结果集以及返回值。 通过本章的学习,应掌握各种存储过程的创建、执行、修改和删除方
SQL数据库应用
第十章 用户自定义函数与事务
1 2 3 4 用户自定义函数简介 创建用户自定义函数 事务处理 锁
函数


函数是接受参数、执行操作(例如复杂计算)并将操作结果以值 的形式返回的例程。 返回值可以是单个标量值或结果集。 SQL Server 2005中有多种函数,根据返回值的类型和是否由系统 提供,分为标量函数、表值函数和内置函数。 SQL Server 2005支持3种用户定义函数:标量函数、表值函数和 聚合函数。 本章介绍用户定义函数的创建、修改及删除。
【例10.2】 使用命令行方式在 Sales数据库创建名为Fn_Total的自 定义函数,用于统计Sell表在某一时 间段内的销售情况。 (1)定义函数。 ① 打开SQL Server Management Studio,连接到数据库服务器。 ② 单击“新建查询”按钮,进入到 命令行方式。
10.2.3 用户定义聚合函数
10.4 锁
一、锁的概念
锁作为一种安全机制,用于控制多个用户的并发操作,防止用户读取正在 由其他用户更改的数据或者多个用户同时修改同一数据,确保事务的完整性和 数据的一致性。 锁定机制的主要属性是锁的粒度和锁的类型。
不同粒度的锁可以锁定的资源 资 源 行 说 行锁定,锁定表中的一行数据 明

页 区域 表
(3)独占(Exclusive)锁。
各种锁之间的兼容性
共享锁 更新锁
独占锁
共 享 锁 是 是 不
更 新 锁 是 不 不
独 占 锁 不 不 不
10.4 锁
二、死锁及其排除
锁机制的引入能解决并发用户的数据一致性问题,但可能会引起进程间的 死锁。 引起死锁的主要原因是,两个进程已各自锁住一个页,但又要求访问被对方 锁住的页。更一般的情况是,一个事务独占了其他事务正在申请的资源,且若 干个这样的事务形成一个等待圈。
10.1 用户自定义函数简介
SQL Server不但提供了系统内置函数,而且还允许用户根据实际 需要创建用户自定义函数。用户自定义函数是由一条或多条T-SQL 语句组成的子程序,保存在数据库内。它可以具有多个输入参数, 并返回一个标量值(单个数据值)或一个表。 SQL Server支持3种类型的用户自定义函数:标量函数、表值函 数及用户定义聚合函数。
事务



事务是作为单个逻辑工作单元执行的一系列操作,这些操作要么 全部执行,要么都不执行。 SQL Server 2005使用锁确保事务完整性和数据库一致性,锁可以 防止用户读取正在由其他用户更改的数据,并可以防止多个用户 同时更改相同数据。 本章介绍如何定义事务进行数据处理并详细说明了锁定机制中锁 的粒度、不同类型的锁的特点。
两个用户竞争资源引起死锁的操作说明
用户 A B
时间
T1 查询TAB1表的信息 (使用HOLDLOCK选项) 查询TAB2表的信息 (使用HOLDLOCK选项)
T2 修改TAB2表的数 据 修改TAB1表的数 据
T3
说明:HOLDLOCK选项表示将共享锁保留到事务完成,而不是在相应的表、行或数据页不 再需要时就立即释放锁
SQL Server 2005数据库还完全支持.NET通用语言运行库(CLR)。 这允许用户使用.NET的语言,如C#、VB.NET等开发SQL Server的聚合 函数。
10.3 事务处理
10.3.1 事务简介
事务是一个逻辑工作单元,其中包括了一系列的操作,这些操作要 么全部执行,要么都不执行。 如果确实发生了只有其中一项操作成功的话,那么应该撤销所做的 操作(回滚事务),就好像什么操作都没有发生一样。 事务具有4个属性:原子性、一致性、隔离性、持久性,简称为ACID 属性。 在SQL Server 2005中,事务的模式可分为显式事务、隐式事务和 自动事务。
10.2 创建用户自定义函数
创建用户自定义函数通常是在命令行方式下使用CREATE FUNCTION 语句来完成的。 一、标量函数 类似于系统内置函数。函数的输入参数可以是所有标量数据类型, 输出参数的类型可以是除了text、nText、image、cursor、timestamp以 外的任何数据类型,函数主体在BEGIN-END块中定义。
键值锁定,锁定具有索引的行数据
页面锁定,锁定8KB的数据页或索引页 区域锁定,锁定8个连续的数据页面或索引页面 表锁定,锁定整个表,包括所有数据和索引在内
数据库
数据库锁定,锁定整个数据库
10.4 锁
一、锁的概念
常用的锁模式有以下3种。 (1)共享(Shared)锁。 (2)更新(Update)锁。
二、表值函数 1、内嵌表值函数
内嵌表值函数没有函数体,其返回的表是单个SELECT语句的结果集。虽然视 图不支持在WHERE子句的搜索条件中使用参数,但内嵌表值函数可弥补视图的 这一不足之处,即内嵌表值函数可用于实现参数化的视图功能。 ③ 输入以下代码: USE Sales GO CREATE FUNCTION Fn_Total (@bt DateTime,@et DateTime) RETURNS TABLE AS RETURN (SELECT Goods.商品名称,Sell. 数量 FROM Goods,Sell WHERE (Sell.售出时间>=@bt AND Sell.售出时间<=@et AND Goods.商品编号=Sell.商 品编号) )
10.3.2 事务处理
1.BEGIN TRANSACTION 语句 格式:BEGIN TRANSACTION [事务名] 功能:定义一个事务,标志一个显式事务的起始点。
2.COMMIT TRANSACTION 语句 格式:COMMIT TRANSACTION [transaction_name] 功能:提交一个事务,标志一个成功的显式事务或隐式事务的结束 。 3.ROLLBACK TRANSACTION 语句 格式:ROLLBACK TRANSACTION [事务名] 功能:回滚一个事务,将显式事务或隐式事务回滚到事务的起点或 事务内的某个保存点。 4.SAVE TRANSACTION语句 格式:SAVE TRANSACTION 保存点名 功能:建立一个保存点,使用户能将事务回滚到该保存点的状态, 而不是简单回滚整个事务。
例10.1 USE Sales
GO
CREATE FUNCTION Fn_cost (@x int,@y money) RETURNS money
AS
begin return(@x*@y) End alter table goods add 金额as dbo.Fn_cost(数量,进货价)
10.2 创建用户自定义函数
相关文档
最新文档