您的位置:首页 > 数据库

SQL Server 2008编程入门经典笔记:事务

2017-10-19 10:30 375 查看

事务

1、BEGIN TRAN

开始事务

2、COMMIT TRAN

提交事务

3、ROLLBACK TRAN

回滚事务

4、SAVE TRAN(不推荐初学者使用)

保存要回滚的点。

SQL Server 日志的工作方式

数据存入数据库前,先存入缓存,在存入日志,最后存入数据库。

在书中的5中情况下会发出检查点,判断是否恢复。

1、失败和恢复

2、隐式事务(危险的)

锁和并发

并发是指同一时间多用户执行同样交互的操作。

锁可以使相同操作的多个用户,后来的进行等待。

1、通过锁可以防止的问题

1)脏读

一个事务读取的是另一个未完成事务的值。

解决方法:事务隔离级别(READ COMMITTED)。

2)非重复性读取

一个事务两次读取值,而另一个事务该变了值。

解决方法:

CHECK约束。

将隔离级别设置为REPEATABLE READ或SERIALIZABLE。

3)幻读

一些数据在进行修改的时候,刚好执行了插入操作,导致一些数据没被修改。

解决方法:设置隔离级别为:SERIALIZABLE

4)丢失更新

一个更新成功写入数据库后,而又意外的被另一个事务重写了。

2、可以锁定的资源

资源包括:数据库、表、区段、页、键、行或行标识符

3、锁升级和锁对性能的影响

当锁数量达到一定的限度时,则会升级为下一个更高的层次。

4、锁定模式

1)共享锁

共享锁可以防止用户执行脏读。

2)排他锁

可以防止两个人同时更新、删除或执行任何操作。

3)更新锁

共享锁+排他锁

4)意向锁

3种类型:意向共享锁、意向排他锁、共享意向排他锁。

5)模式锁

模式修改锁:不能执行查询、CREATE、ALTER、DROP操作

模式稳定性锁定:类似共享锁。

6)批量更新锁

执行任何普通操作都会将表锁定。

5、锁的兼容性

见书389

6、指定一种特有的锁定类型——优化器提示(高级)

1)使用Management Studio确定锁

设置隔离级别

1)READ COMMITTED

可以防止脏读。

2)READ UNCOMMITTED(最危险)

取消所有的锁。

3)REPEATABLE READ

可以防止脏读和非重复性读取。

4)SERIALIZABLE

可以防止所有。

5)SNAPSHOT

类似READ COMMITTED和READ UNCOMMITTED。

只有数据库打开了ALLOW_SNAPSHOT_ISOLATION选项时才可以使用。

处理死锁(1205错误)

1、SQL Server 判断死锁的方式

每隔5秒进行检查

2、选择死锁的牺牲者的方式

选择回滚代价最低的事务。

3、避免死锁

1)按相同的顺序使用对象。

2)使事务尽可能简短。

3)尽可能使用最低的事务隔离级别。

4)不要采用允许无限中断的事务。

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: