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
相关文章推荐
- SQL Server 2008编程入门经典笔记(第十四章:事务和锁)
- SQL Server 2008编程入门经典笔记:SQLServer存储和索引结构
- SQL Server 2008编程入门经典笔记:T-SQL基本语句
- SQL Server 2008编程入门经典笔记:约束
- SQL Server 2008编程入门经典笔记:存储过程
- SQL Server 2008编程入门经典笔记(第二章:SQL Server管理工具)
- SQL Server 2008编程入门经典笔记:表连接
- SQL Server 2008编程入门经典笔记:视图
- SQL Server 2008编程入门经典笔记:用户自定义函数
- SQL Server 2008编程入门经典笔记(第五章:创建和修改数据表)
- SQL Server 2008编程入门经典笔记(第六章:约束)
- SQL Server 2008编程入门经典笔记:脚本
- SQL Server 2008编程入门经典笔记(第十章:视图)
- SQL Server 2008编程入门经典笔记:更复杂的查询
- SQL Server 2008编程入门经典笔记(第一章:RDBMS基础:SQL Server数据库的构成)
- SQL Server 2008编程入门经典笔记(第四章:连接)
- SQL Server 2008编程入门经典笔记(第七章:更复杂的查询)
- SQL Server 2008编程入门经典笔记(第三章:T-SQL基本语句)
- SQL Server 2008编程入门经典(第3版) 学习记录1
- SQL Server 2008编程入门经典(第3版) 学习记录2