logo资料库

实验十 SQL SERVER事务设计(选做).doc

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
实验十 SQL SERVER事务设计(选做)
一、实验目的:
二、实验内容:
实验十 SQL SERVER 事务设计(选做) 实验时间:2018.06.06 一、实验目的: (1)通过实验理解事务的概念、特性,掌握事务的设计思想和事务创建、执行的方 法; (2)掌握事务的提交 COMMIT; (3)掌握事务的回滚 ROLLBACK; (4)了解事务的锁。 二、实验内容: 创建一个名为“仓库职工”的数据库,导入以下的四张表到该数据库中,完成以下 各题: 职工表 仓库号 WH1 WH2 WH3 WH4 仓库号 WH2 WH1 WH2 WH3 WH1 WH3 WH1 仓库表 城市 北京 上海 广州 武汉 职工号 E1 E2 E3 E4 E5 E6 E7 面积 370 500 200 400 工资 1220 1210 1250 1230 1250 2000 2080 职工号 E3 E1 E7 E6 E3 供应商号 S7 S4 S4 S6 S4 订购表 订购单号 OR67 OR73 OR76 OR77 OR79 订购日期 2009-12-4 2009-4-1 2009-4-2 2009-1-21 2009-11-15
E1 E3 E3 S6 S6 S3 供应商号 S3 S4 S6 S7 S8 S9 供应商名 振华电子厂 华通电子公司 607 厂 爱华电子厂 胖熊公司 巧姑娘日化 2009-2-1 2009-3-12 2009-3-2 OR80 OR90 OR91 供应商表 地址 西安 北京 郑州 北京 广州 北京 1. 创建事务,并执行。功能为实现广州的职工加 10%的工资. set 工资=工资*1.1 Begin transaction Use cangku Go Update 职工 From 职工,仓库 Where 职工.仓库号=仓库.仓库号 and 城市=’广州’ Go Commit Go Begin transaction Use 仓库职工 Go Update 职工表 From 职工表,仓库表 Where 职工表.仓库号=仓库表.仓库号 and 城市='广州' Go Commit Go 执行前: set 工资=工资*1.1 执行后: (2)在 select 语句中加锁,悲观锁定职工表。 Begin transaction Select * From 职工表 with(xlock) Insert into 职工表(仓库号,职工号) Update 职工表 set 工资=2980 Where 仓库号=‘WH2’ and 职工号=‘E10’ values(‘WH2’,’E10’)
* Commit transaction Begin transaction Select From 职工表 with(xlock) Insert into 职工表(仓库号,职工号) Update 职工表 set 工资=2980 Where 仓库号='WH2' and 职工号='E10' Commit transaction 执行前: values('WH2','E10') 执行后: count(供应商号) From 供应商表 (3)使用 HOLDLOCK 对供应商表加共享锁。 Begin transaction t2 Select 供应商号 From 供应商表 with(holdlock) Select Commit Begin transaction t2 Select 供应商号 From 供应商表 with(holdlock) Select count(供应商号) From 供应商表 Commit 三、思考题: 1.什么是事务?事务和程序是一个概念吗? 答:事务(Transaction)是并发控制的单位,是用户定义的一个操作序 列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过 事务,SQL Server 能将逻辑相关的一组操作绑定在一起,以便服务器保
持数据的完整性。它与程序的概念不同 2. 解释语句 rollback 和 commit 的作用。 答:COMMIT 是表示【提交】,就是提交事务的所有操作。具体地说,就 是将事务中的所有对数据库的更新写回到磁盘上的物理数据库中去, 事务正常结束。ROLLBACK 指的是【回滚】,即是在事务的运行过程中, 发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有 的已完成的操作全部撤销,回滚到事务开始之前的状态。 3. 为何使用事务? 答:事务是单个的工作单元。如果某一事务成功,则在该事务中进行 的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务 遇到错误且必须取消或回滚,则所有数据修改均被清除。 事务使用,可以提供一个机制,防止在执行过程中出错而之前正确的 sql 有影响了数据库的情况出现 4. 乐观锁和悲观锁的优缺点各是什么? 答:悲观锁有缺点:悲观并发控制实际上是“先取锁再访问”的保守 策略,为数据处理的安全提供了保证。但是在效率方面,处理加锁的 机制会让数据库产生额外的开销,还有增加产生死锁的机会;另外, 在只读型事务处理中由于不会产生冲突,也没必要使用锁,这样做只 能增加系统负载;还有会降低了并行性,一个事务如果锁定了某行数 据,其他事务就必须等待该事务处理完才可以处理那行数。 乐观锁优缺点:乐观并发控制相信事务之间的数据竞争(data race)的 概率是比较小的,因此尽可能直接做下去,直到提交的时候才去锁定, 所以不会产生任何锁和死锁。但如果直接简单这么做,还是有可能会 遇到不可预期的结果,例如两个事务都读取了数据库的某一行,经过 修改以后写回数据库,这时就遇到了问题. 四、实验心得 答:通过实验理解事务的概念、特性,掌握事务的设计思想和事务创建、执行的方 法;掌握了事务的提交 COMMIT、掌握了事务的回滚 ROLLBACK 和了解了事务的锁
分享到:
收藏