数据库隔离级别介绍

来源:互联网 发布:iphonex 壁纸编辑软件 编辑:程序博客网 时间:2024/05/16 12:43

  事物(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如select操作) 或者是一组操作系列。事物的acid属性,即原子性(atomicty)、一致性(consistency)、隔离性(Isolation)、持久性(Durability)。

原子性 : 保证事物中的所有操作全部执行或者全部不执行,比如说执行一个事物,要么全部执行完成,要么回滚到执行之前,拿银行转账事物来说吧,要么转账成功,要么转账失败!!成功,两个金额账户发生变化,一个增加,一个减少,失败的话,两个账户金额保持不变,不会出现一个账户多了钱,一个账户少了钱!!!


一致性:保证数据库始终保持数据的一致性  -- 事物操作之前和事物操作之后是一致的。上面银行转账的例子就是,不管事物执行成功与否,两个账户之间的总金额在执行前后是一致的!!


隔离性: 多个事物并发执行的话结果应该与多个事物串行执行一样的。如果每个事物都串行执行的话,效率会非常的低,所有有些操作在保持数据安全一致的情况下可以冰法执行!!!!!比如说:两个不同的事物读取同一批数据,这样完全可以并发执行,为了控制并发执行的效果就有了不同的隔离级别!!


持久性:持久性表示事务执行完成之后,对数据库的影响是持久的,即使数据库因故障而受到破坏,对数据库也应该能够恢复!!!通常实现方式是采用日志。。




  事物隔离级别(transaction ioslation levels): 隔离级别就是对事务并发控制的等级。ANSI / ISO SQL将其分为串行化(Serializable)、可重复读(REPEATABLE READ)、读已提交(READ COMMIT)、读未提交(READ UNCOMMITED)四个等级。为了实现隔离级别通常数据库采用锁(LOCK)。一般在编程的时候隔离级别,至于具体采用什么锁则由数据库来设置!!


串行化(Serializable):所有的事务都一个接一个的串行执行,这样可以避免幻读(phantomreads)。对于基于锁来实现并发控制的数据库来说,串行化要求在执行范围查询(如选取年龄在10 到 30之间的用户)的时候,需要获取范围锁(range lock)。如果不是基于锁实现并发控制数据库,则检测到有违反串行化操作的事务时,需要滚回该事物。


可重复读(REPEATBLE):所有被select获取的数据都不能被修改,这样可以避免一个事物前后读取出数据不一致的情况。



0 0