1、1 事务和锁 第八章 2 回顾 批和批处理的概念变量SQLServer的基本函数 3 目标 理解事务的概念理解事务的特性 分类在SQLServer中启动 提交和回滚事务理解锁与死锁的概念事务的并发控制 4 事务概念 构成单一逻辑工作单元的操作集合访问并可能更新各种数据项的一个程序执行单元一个事务内所有语句被作为整体执行 遇到错误时可以回滚 取消事务内所做的所有改变 从而保证数据库的一致性和可恢复性 5 事务的特性 原子性 Atomicity A 事务的所有操作在数据库中要么全部正确反映出来要么全部不反映 一致性 Consistency C 事务隔离执行时 即在没有其他事务并发执行的情况下 保持
2、数据库的一致性 隔离性 Isolation I 尽管多个事务可以并发执行 但系统保证 对于任何以对事务T1和T2 在T1看来 T2或者在T1开始之前已经停止执行 或者在T1完成之后开始执行 这样 每个事务都感觉不到系统中有其他事务在并发地执行 持久性 Durability D 一个事务成功完成后 它对数据库的改变必须是永久的 即使是系统出现故障时也是如此 6 事务的分类1 4 显式事务显示事务就是指由用户执行T SQL事务语句而定义的事务 这类事务又称为用户自定义事务 隐性事务指当前事务提交或回滚后 sqlserver自动开始的事务 自动提交事务指当一个语句成功执行后 他被自动提交 而当他执行
3、过程中产生错误时 则被自动回滚 他是SQLSERVER默认的事务管理模式 当于SQLSERVER建立连接后 直接进入到自动事务模式 7 事务的分类2 4 显式事务显式地定义其开始和结束的事务当明确键入BEGINTRANS和COMMIT语句时 就会发生显式事务显式事务模式持续的时间仅是该事务的持续期 显示事务演示 8 事务的分类3 4 隐性事务通过Transact SQLSETIMPLICIT TRANSACTIONSON语句 将隐性事务模式设置为打开当连接以隐性事务模式进行操作时 MicrosoftSQLServer将在提交或回滚当前事务后自动启动新事务无须描述事务的开始 只需提交或回滚每个事
4、务隐式事务演示 9 事务的分类4 4 自动提交事务所有Transact SQL语句在完成时 都会提交或回滚 如果一条语句成功完成 则将其提交 如果遇到任何错误 则将其回滚 只要没有用显式或隐性事务模式替代自动提交模式 SQLServer连接就以自动提交模式为默认模式进行操作 10 用T SQL表示事务 BEGINTRANSACTION 开始事务COMMITTRANSACTION 提交事务ROLLBACKTRANSACTION 回滚事务SAVETRANSACTION 在事务内设置保存点 11 提交事务演示 12 在事务内设置保存点演示 13 使用事务日志 事务日志是一个单独的文件通过在日志中对操
5、作进行跟踪 使得数据库服务器从各种灾难中恢复成为可能事务日志确保原子性和持久性SQLServer将所有对数据库的修改写入事务日志 14 锁的概念 锁是在多用户环境中对数据访问的限制SQLServer2000使用锁定来确保事务的完整性和数据库的一致性锁定蕴含的基本概念是用户需要对表的排它访问 15 SQLServer中锁的分类 共享 用于不更改或不更新数据的操作 只读操作 如SELECT语句 更新用于可更新的资源中 防止当多个会话在读取 锁定以及随后可能进行的资源更新时发生常见形式的死锁 排它用于数据修改操作 例如INSERT UPDATE或DELETE 确保不会同时对同一资源进行多重更新 16
6、 SQLServer中锁的分类 意向用于建立锁的层次结构 意向锁的类型为 意向共享 IS 意向排它 IX 以及与意向排它共享 SIX 架构在执行依赖于表架构的操作时使用 架构锁的类型为 架构修改 Sch M 和架构稳定性 Sch S 大容量更新向表中大容量复制数据并指定了TABLOCK提示时使用 17 死锁 事务1请求了事务2加锁的资源 事务2又请求了事务1加锁的资源 18 解除死锁 SETDEADLOCK PRIORITYSETLOCK TIMEOUT 19 事务的并发问题1 5 如果没有锁定且多个用户同时访问一个数据库 则当他们的事务同时使用相同的数据时可能会发生问题 并发问题包括 丢失或
7、覆盖更新未确认的相关性 脏读 不一致的分析 非重复读 幻像读 20 事务的并发问题2 5 丢失或覆盖更新当两个或多个事务选择同一行 然后基于最初选定的值更新该行时 会发生丢失更新问题每个事务都不知道其它事务的存在最后的更新将重写由其它事务所做的更新 这将导致数据丢失 21 事务的并发问题3 5 未确认的相关性当第二个事务选择其它事务正在更新的行时 会发生未确认的相关性问题第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改 22 事务的并发问题4 5 不一致的分析 非重复读 当第二个事务多次访问同一行而且每次读取不同的数据时 会发生不一致的分析问题在不一致的分析中 第二个事务读取的
8、数据是由已进行了更改的事务提交的不一致的分析涉及多次 两次或更多 读取同一行 而且每次信息都由其它事务更改 因而该行被非重复读取 23 事务的并发问题5 5 幻像读当对某行执行插入或删除操作 而该行属于某个事务正在读取的行的范围时 会发生幻像读问题事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中 因为该行已被其它事务删除同样 由于其它事务的插入操作 事务的第二次或后续读显示有一行已不存在于原始读中 24 事务的隔离和隔离级别1 2 未提交读提交读可重复读可串行读 25 事务的隔离和隔离级别2 2 26 总结 事务的概念事务的类别事务的特征锁的概念死锁事务的并发控制问题事务的隔离级别