当前位置: 代码迷 >> 综合 >> T-Sql学习(14) - 事务处理
  详细解决方案

T-Sql学习(14) - 事务处理

热度:32   发布时间:2024-01-13 01:47:20.0

 事务处理

ACID:A=Atomic 原子性;C=Consistent一致性;I=Isolated隔离性;D=Durable持久性

1,事务在提交之前是在缓存中进行的,并同时写log,提交的时候才真正进行写;这时候就不能进行rollback了;

2,bulk insert, truncate table, select ... into, writetext, updatetext基本上是无log的操作,因为他不产生行一级的log,它只是有页一级的记录;这样就会大大的提高性能;

3,有时候,为了避免日志、阻塞等问题,有一些数据库设计成了只读的或者是单用户的。这种情况对一些决策系统会有意义;

4,transaction isolation level(TIL)
msdn上面搜索:SET TRANSACTION ISOLATION LEVEL,分级:
READ UNCOMMITTED:指定语句可以读取已由其他事务修改但尚未提交的行。
READ COMMITTED:指定语句不能读取已由其他事务修改但尚未提交的数据。这样可以避免脏读。其他事务可以在当前事务的各个语句之间更改数据,从而产生不可重复读取和幻像数据。该选项是 SQL Server 的默认设置。
REPEATABLE READ:指定语句不能读取已由其他事务修改但尚未提交的行,并且指定,其他任何事务都不能在当前事务完成之前修改由当前事务读取的数据。
SNAPSHOT:指定事务中任何语句读取的数据都将是在事务开始时便存在的数据的事务上一致的版本。事务只能识别在其开始之前提交的数据修改。在当前事务中执行的语句将看不到在当前事务开始以后由其他事务所做的数据修改。其效果就好像事务中的语句获得了已提交数据的快照,因为该数据在事务开始时就存在。
SERIALIZABLE:请指定下列内容:
1)语句不能读取已由其他事务修改但尚未提交的数据。
2)任何其他事务都不能在当前事务完成之前修改由当前事务读取的数据。
3)在当前事务完成之前,其他事务不能使用当前事务中任何语句读取的键值插入新行。
范围锁处于与事务中执行的每个语句的搜索条件相匹配的键值范围之内。这样可以阻止其他事务更新或插入任何行,从而限定当前事务所执行的任何语句。这意味着如果再次执行事务中的任何语句,则这些语句便会读取同一组行。在事务完成之前将一直保持范围锁。这是限制最多的隔离级别,因为它锁定了键的整个范围,并在事务完成之前一直保持范围锁。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。

5,SAVE TRANSACTION
用户可以在事务内设置保存点或标记。保存点可以定义在按条件取消某个事务的一部分后,该事务可以返回的一个位置。

6,事务处理中,很多的SQL命令都是非法的

7,事务处理代码的优化:
1)事务尽可能的短;
2)限制事务处理可以修改的数据
3)不要要求活动用户在事务处理过程中输入;
4)尽可能的并发;
5)谨慎使用无日志操作;
6)尽量使用低级别的TIL