一、处理级别
数据库一般提供四种事务的隔离级别,来处理事务并发的问题:
ReadUncommited(未提交读):没有提交就可以读取到数据,发出了Insert,但没有commit就可以读取到;
ReadCommited(提交读):只有提交后才可以读,常用;
RepeatableRead(可重复读):必需提交才能见到,读取数据时数据被锁住;
Serialiazble(序列化读):最高隔离级别,串型的,你操作完了,我才可以操作,并发性特别不好。
二、各个级别对异常的处理效果
ReadUncommited
对于脏读、不可重复读、更新丢失的问题都存在。
ReadCommited
处理了脏读,不可重复读的问题依然存在。
Sqlserver和Oracle默认的事务隔离级别是这个级别。
Sqlserver查询事务隔离级别在查询中使用如下语句:
DBCC USEROPTIONS
在sqlserver2000中没有isolation level 这个条目,08数据库中有。
RepeatableRead
处理方法是脏读、不可重复读的第一种情况,但是幻读依然会存在。
MySql默认的事务隔离级别是这个级别。
查询方法:
select @@tx_isolation
Serialiazble
处理所有的异常。
三、总结
第一个级别和第四个级别一般不用;
第二种级别和第三个级别是常用的级别,我们在使用事务的时候,一般采用数据库自身的事务并发机制,处理好自己程序的事务即可,对数据的锁定控制交给数据库自身处理即可,不建议自己的程序加锁来锁定数据,除非特殊情况。