有关于SQL SERVER的事务(随手笔记)
2015-08-31 13:04
162 查看
Microsoft SQL server 2008技术内幕, T-SQL查询 不错的序言语录:
使用ORM映射工具是要付出一定的代价的.在把计算工作交给数据库服务器处理的同时,也能够减少为传输数据而花费的网络流量,提高应用程序的整体性能.写好SQL,需要我们用一种不同的思维方式来处理问题,这是一种面向声明和集合的思维方式,而不是面向过程的,这就是两种思维方式的分化.SQL用的好,写出来的代码会有10倍的有效,而且更具有伸缩性和可维护性.
来自于"事务和并发.事务"
常见问题点:1) SQL server如何处理对于同一个数据的并发使用(concurrency)的问题?2) SQL server如何使用所来隔离不一致的数据?3) SQL server如何解决阻塞状态?4) 在不同的隔离级别下,SQL server如何控制数据一致性的级别?5) 如何避免或者减少死锁的发生?
在Sql server中,与Oracle不太一样的事情是,如果在implicit transactions会话选项为默认OFF的时候,必须要自己来声明开始一个事务和提交或者回滚一个事务.begin tran;insert into foo values('1','jason');commit/rollback tran;
试题点:事务的四个属性ACID. 原子性,一致性,隔离性,持久性. 有关于持久性方面,与Oracle有一致的操作,当数据库重启或者启动的时候,会去检查日志里面的相关操作,如果该日志已经被提交,但是尚未写入数据库的话,就会写入数据库,在SQL server的恢复处理一般包括两个阶段,重做阶段和撤销阶段.redo and undo.重做阶段,对于提交指令已经写入日志,但是数据修改还没有应用到数据分区的事务,数据库引擎会重做replaying这些事务所做的修改,也叫做前滚 rolling forward.在撤销阶段,对于提交指令还灭有记录到日志中的事务,数据库引擎会撤销这些事务所做的修改,这个过程也叫做回滚 rolling back.
试题点:在Sql server中,如何判断当前的操作在一个事务当中呢? 通过读取@@trancount变量,如果这个变量返回的是一个大于零的值,那么说明当前处于一个事务里面,如果这个变量返回的是一个等于零的值,那么就说明当前没有处于一个事务里面.begin tran;insert into foo values(1,1);print @@trancount;commit tran;
几行语句的作用:set @orderId = scope_identity();dbcc checkident('sales.orders',reseed,110077);
使用ORM映射工具是要付出一定的代价的.在把计算工作交给数据库服务器处理的同时,也能够减少为传输数据而花费的网络流量,提高应用程序的整体性能.写好SQL,需要我们用一种不同的思维方式来处理问题,这是一种面向声明和集合的思维方式,而不是面向过程的,这就是两种思维方式的分化.SQL用的好,写出来的代码会有10倍的有效,而且更具有伸缩性和可维护性.
来自于"事务和并发.事务"
常见问题点:1) SQL server如何处理对于同一个数据的并发使用(concurrency)的问题?2) SQL server如何使用所来隔离不一致的数据?3) SQL server如何解决阻塞状态?4) 在不同的隔离级别下,SQL server如何控制数据一致性的级别?5) 如何避免或者减少死锁的发生?
在Sql server中,与Oracle不太一样的事情是,如果在implicit transactions会话选项为默认OFF的时候,必须要自己来声明开始一个事务和提交或者回滚一个事务.begin tran;insert into foo values('1','jason');commit/rollback tran;
试题点:事务的四个属性ACID. 原子性,一致性,隔离性,持久性. 有关于持久性方面,与Oracle有一致的操作,当数据库重启或者启动的时候,会去检查日志里面的相关操作,如果该日志已经被提交,但是尚未写入数据库的话,就会写入数据库,在SQL server的恢复处理一般包括两个阶段,重做阶段和撤销阶段.redo and undo.重做阶段,对于提交指令已经写入日志,但是数据修改还没有应用到数据分区的事务,数据库引擎会重做replaying这些事务所做的修改,也叫做前滚 rolling forward.在撤销阶段,对于提交指令还灭有记录到日志中的事务,数据库引擎会撤销这些事务所做的修改,这个过程也叫做回滚 rolling back.
试题点:在Sql server中,如何判断当前的操作在一个事务当中呢? 通过读取@@trancount变量,如果这个变量返回的是一个大于零的值,那么说明当前处于一个事务里面,如果这个变量返回的是一个等于零的值,那么就说明当前没有处于一个事务里面.begin tran;insert into foo values(1,1);print @@trancount;commit tran;
几行语句的作用:set @orderId = scope_identity();dbcc checkident('sales.orders',reseed,110077);
相关文章推荐
- mysql create database 指定utf-8编码
- SQL语句基础篇
- SQL:将查询结果插入到另一个表的三种情况
- win7 MS SQL SERVER 2000安装
- Linux运维 第四阶段 (七)MySQL REPLICATION(master->slave)
- SQL一次查出多个字段的COUNT值
- Oracle Study之---Oracle升级前备份和失败回退
- oracle表空间不足,ORA-00604的解决方法
- ubuntu上安装mySQL数据库,并允许远程连接
- 并发控制 mysql InnoDB表锁
- Oracle_如何从数据库 11.2 降级至之前的版本(包括 11.2.0.3-11.2.0.1)
- MySQL出现Errcode:28错误提示解决办法
- Oracle Study之---Oracle升级失败回退(catdwgrd.sql)
- Mysql命令行添加用户
- MySQL日志维护策略汇总
- MySQL执行计划解读
- mysql 时间戳与日期格式的相互转换
- .NET平台下WEB应用程序的部署(安装数据库和自动配置,启动条件)
- 数据库Schema两种含义
- mongodb脚本从windows上传到linux无法执行