5.1 事务管理Begin TransactionINSERT INTO HistoryGrade SELECT * FROM GradeDELETE FROM GradeINSERT INTO HistoryStudent SELECT * FROM StudentDELETE FROM StudentCommit Transaction该事务如果有其中任何一条语句执行错误事务会回滚来撤消已执行的语句对数据库的更新操作结果
Begin Transaction INSERT INTO HistoryGrade SELECT * FROM Grade DELETE FROM Grade INSERT INTO HistoryStudent SELECT * FROM Student DELETE FROM Student Commit Transaction 该事务如果有其中任何一条语句执行错误, 事务会回滚来撤消已执行的语句对数据库 的更新操作结果。 5.1 事务管理
5.2 并发控制允许数据库中的相同数据同时被多个事务访问。1.并发访问问题1)丢失修改:当两个事务同时对同一数据修改时,最后只有一个生效,另一个修改丢失。例:两人同时定机票,修改剩余机票数。2)数据获取错误:当一个事务恰好读取了另一个事务在回滚之前修改的数据,那么这个数据与数据库的实际数据不符合,该数据被称为“脏数据”。例如,一个定票事务修改了剩余机票数后回滚另一事务恰在其回滚前读取剩余机票,事务就获取了“脏数据”。3)不可重读:一个事务读取某数据后,该数据被另一事务更新,当该事务再读该数据进行校验时,数据不一致
5.2 并发控制 2)数据获取错误:当一个事务恰好读取了另一个事务在回 滚之前修改的数据,那么这个数据与数据库的实际数据 不符合,该数据被称为“脏数据” 。 3)不可重读:一个事务读取某数据后,该数据被另一事务更 新,当该事务再读该数据进行校验时,数据不一致。 1. 并发访问问题 1)丢失修改:当两个事务同时对同一数据修改时,最后只 有一个生效,另一个修改丢失。 允许数据库中的相同 数据同时被多个事务 访问。 例:两人同时定机票,修改 剩余机票数。 例如,一个定票事务修改了剩余机票数后回滚, 另一事务恰在其回滚前读取剩余机票,事务就 获取了“脏数据
5.2并发控制2.锁定管理数据库通过锁定机制解决并发访问的问题,锁定可以防止用户读取正在由其他用户更改的数据并可以防止多个用户同时更改相同数据,解决数据库并发访问所带来的数据不一致问题。锁定管理包括:加锁、锁定和解锁。事务在访问某数据对象之前,向系统申请加锁,加锁的数据对象在被其它事务访问时受到限制,待事务完成后锁被释放
2. 锁定管理 数据库通过锁定机制解决并发访问的问题。 锁定可以防止用户读取正在由其他用户更改的数据, 并可以防止多个用户同时更改相同数据,解决数据库并 发访问所带来的数据不一致问题。 锁定管理包括:加锁、锁定和解锁。 事务在访问某数据对象之前,向系统申请加锁,加锁 的数据对象在被其它事务访问时受到限制,待事务完成 后锁被释放。 5.2 并发控制
5.2 并发控制3.SQLServer的锁粒度和锁模式SQLServer具有多粒度锁定,允许一个事务锁定不同类型的数据对象。锁定在较小的粒度(例如行)可以增加系统并发访问能力但需要较大的系统开销:锁定在较大的粒度就并发而言是相当昂贵的,但要求的系统开销较低,因为需要维护的锁较少。系统根据事务自动确定锁定粒度并实施锁定:资源描述行锁定表中的一条记录关键字锁定记录的集合,是索引中的行锁页对一个数据页或索引页锁定,每页大小8KB区域对相邻的8个数据页或索引页构成的一组数据锁定表对包括所有数据和索引在内的整个表锁定数据库对整个数据库锁定
3. SQL Server的锁粒度和锁模式 SQL Server具有多粒度锁定,允许一个事务锁定不 同类型的数据对象。 锁定在较小的粒度(例如行)可以增加系统并发访问 能力但需要较大的系统开销;锁定在较大的粒度就并发 而言是相当昂贵的,但要求的系统开销较低,因为需要 维护的锁较少。 系统根据事务自动确定锁定粒度并实施锁定: 资 源 描 述 行 锁定表中的一条记录 关键字 锁定记录的集合,是索引中的行锁 页 对一个数据页或索引页锁定,每页大小8 KB 区域 对相邻的8个数据页或索引页构成的一组数据锁定 表 对包括所有数据和索引在内的整个表锁定 数据库 对整个数据库锁定 5.2 并发控制
5.2 并发控制3.SQLServer的锁粒度和锁模式SQLServer使用不同的锁模式锁定资源,这些锁模式用于确定并发事务访问资源的方式。锁模式描述在不更改或不更新数据的操作(只读操作)时使用,如SELECT语句。共享锁有共享锁存在时,任何其他事务不能修改数据,一旦读数据结束,释放共享锁用于可更新的资源中。防正当多个会话在资源操作时发生死锁,更新锁更新锁在修改数据时可以升级为独占锁,在没有修改操作时降为共享锁用于数据修改操作,如INSERT、UPDATE或DELETE,确保不会同时对独占锁同一资源进行多重更新意向锁防止其他事务对某个数据单元加独占锁在执行对表结构操作时使用,当执行DDL语言时,使用Sch-M锁定,其结构锁他情况使用Sch-S锁定大容量更新锁向表中大容量复制数据并指定了TABLOCK提示时使用
SQL Server 使用不同的锁模式锁定资源,这些锁模 式用于确定并发事务访问资源的方式。 表4-19 SQL Server使用的锁模式 锁模式 描 述 共享锁 在不更改或不更新数据的操作(只读操作)时使用,如 SELECT 语句。 有共享锁存在时,任何其他事务不能修改数据,一旦读数据结束,释放 共享锁 更新锁 用于可更新的资源中。防止当多个会话在资源操作时发生死锁,更新锁 在修改数据时可以升级为独占锁,在没有修改操作时降为共享锁 独占锁 用于数据修改操作,如 INSERT、UPDATE 或 DELETE,确保不会同时对 同一资源进行多重更新 意向锁 防止其他事务对某个数据单元加独占锁 结构锁 在执行对表结构操作时使用,当执行 DDL语言时,使用Sch-M锁定,其 他情况使用Sch-S锁定 大容量更新锁 向表中大容量复制数据并指定了 TABLOCK 提示时使用 5.2 并发控制 3. SQL Server的锁粒度和锁模式