事务与游标

本文深入探讨了SQL Server数据库中事务的基本概念和管理,包括事务的ACID属性,以及不同隔离级别。同时,介绍了游标的使用,如何在事务中操作游标进行数据处理,为日常数据库任务和工作提供了实用指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单概述 事务与游标

 

事务

 

3 一个事务可以被定义为作为工作的单个的逻辑单元被一起执行的一串的操作。
3 单个的工作单元必须具有称为ACID(原子性,一致性,独立性,和持久性)的四个性质
ä 原子性
ä 一致性
ä 独立性
ä
 
* 为实现ACID性质的需求,SQL Servr提供了下面的特性:
3 事务管理
3 上锁
3
 
* 事务日志-SQL Server管理所有它的的事务而维护的日志
*
 
 
* BEGIN TRANSACTION:语句标志显示事务的开始
3 语法
     BEGIN TRAN[SACTION] [transaction_name |  
    @tran_name_variable]
* COMMIT TRANSACTION COMMIT WORK:语句标志显式事务的结束点
3 语法
  COMMIT [TRAN[SACTION][transaction_name |@tran_name_variable]]
 
* Autocommit事务
3  autocommit模式是SQL Server的缺省事务管理模式
* 结果:
3 事务的使用可以避免数据的不一致性
3
 
 
* ROLLBACK TRANSACTION  ROLLBACK WORK:这些语句把显式的或隐式的事务回滚到事务的开始,或者回滚到事务内的保存点
3 语法
ROLLBACK [TRAN[SACTION] [transaction_name |@tran_name_variable |savepoint_name |
@savepoint_variable]]
* 结果
3 事务可用ROLLBACK TRANSACTION语句回复
 
 
* 保存事务
3 它在事务内设置保存点 。保存点把事务分成几个逻辑单元这样事务可以返回到保存点,如果事务的一部分是有条件地被取消。
3 语法
SAVE TRAN[SACTION] {savepoint_name | @savepoint_variable}
* 结果
3 事务可以用SAVE TRANSACTION语句分解成几个逻辑单元
 
 
* 事务的并发性
3 SQL Server提供了乐观的和悲观的并发性控件
3 乐观并发性控件
ä   建立在多用户间资源冲突大概是不可能的假设的基础上
ä   允许事务执行不用锁定任何资源
ä
 
3 悲观并发性控件
ä
 
并发性问题
3 丢失更新
ä
 
3 自由依赖性
ä
 
3 不一致性分析
ä
 
3 幻象读取
ä   幻象读取又称为作幻象问题
 
 
 
* 锁项- SQL Server 可对以下资源上锁:
3 RID
3 Key
3 Page
3 Extent
3 Table
3
 
* SQL Server锁模型
3 共享锁
ä   允许并发事务来读取资源
3 更新锁
ä   避免了常见形式的死琐发生
3 互斥型锁
ä
意向锁
ä   指示SQL Server要在层次结构较低的某个资源上获得一个共享或排它锁
3 模式锁
ä
 
死锁
死锁是这样一种情形:两个用户(或事务)在个别的对象的上锁,并且每个用户正在等待另一个对象的锁
 
* 设置死锁优选级
3   为探测死锁的情况,SQL Server扫描在等待锁请求的会话
3 SQL Server提供SET DEADLOCK_PRIORITY命令来定制死锁
3 语法
  SET DEADLOCK_PRIORITY {LOW|NORMAL|@deadlock_var}
 
定制LOCK_TIMEOUT
3  SET LOCK_TIMEOUT命令可被用来设置等待被阻塞资源语句的最长时间
 
游标
* 游标是一个在给定结果集中帮助访问和操纵数据的数据库对象
* 游标能以下列方式处理结果集中的行:
3 允许从结果集中检索指定的行
3 允许结果集中当前行被修改
3 帮助从结果集中当前行导航到不同的行
3
 
当在SQL Server中使用游标时,需要执行下面任务:
3 需要定义游标和设置的它的属性。
3 需要打开游标。
3 所需的行要从游标取得。
3 如果需要的话,游标的当前行中的数据可被修改的。
3 需要关闭游标。
3 游标应解除分配。这是一个很好的习惯由于游标所用的资源被释放。
 
* 声明游标
3 你可以用DECLARE CURSOR语句来定义游标和它的特性集
3 语法
DECLARE cursor_name [INSENSITIVE] [SCROLL]
CURSOR FOR { select_statement }
[FOR {READ ONLY | UPDATE [OF column_list]}]
 
* 打开游标
3 你可以用OPEN语句打开前面声明过的游标
3 语法
 
* 取数据
3
3 语法
FETCH [[NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n]] FROM cursor_name[ INTO @variable_name [ ,...n ] ]
在打开一个游标后,你可以从游标的结果集中检索指定行。SQL Server 2000提供FETCH语句来完成这项任务。
 
* 关闭游标
3 为了释放被游标持有的资源你必须关闭游标。游标可以用CLOSE语句关闭。
3 Syntax
CLOSE cursor_name 
* 解除分配游标
3 你可以抹去由DECLARE游标语句定义的游标的定义
3 语法
   DEALLOCATE cursor_name
 
  OPEN cursor_name
允许被其它用户修改的数据在结果集中是可见的
  当任何数据定义(DDL)操作在表上执行时,SQL Server考察模式修改 (Sch-M)
  唯一地限制并发事务访问一个资源
Database
  不一致性分析问题又称为 不可重复问题
  自由依赖性问题uncommitted dependency )也称为无效读入(dirty read问题
  丢失更新问题发生在当两个或多个事务基于原先所选值试图修改同一行的时候
  在事务处理期间的锁定资源
  只有在提交事务时才进行资源检查
 
 
 
 
UPDATE语句可通过使用BEGIN TRANSACTIONCOMMIT TRANSACTION语句来维持其原子性
 
 
 
显式事务-是事务的开始和结束都被显式地定义的事务。
日志
持久性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值