Oracle——事务(Transaction)

 

事务:数据库

  事务是指做为单个逻辑工做单元执行的一组相关操做。  安全

  这些操做要求所有完成或者所有不完成。性能

使用事务的缘由:保证数据的安全有效。spa

事务的四个特色:(ACID)设计

  一、原子性(Atomic):事务中全部数据的修改,要么所有执行,要么所有不执行。事务

  二、一致性(Consistence):事务完成时,要使全部全部的数据都保持一致的状态,换言之:经过事务进行的全部数据修改,必须在全部相关的表中获得反映。it

  三、隔离性(Isolation):事务应该在另外一个事务对数据的修改前或者修改后进行访问。io

  四、持久性(Durability):保证事务对数据库的修改是持久有效的,即便发生系统故障,也不该该丢失。table

事务组成:select

  一条或者多条DML,[一条DDL]和一条DCL。

事务的分类:

  一、显式事务:

    (1)要去显式的调用DCL。

    (2)只有用到COMMIT之后才会真正写入数据库,也持久化了。

  二、隐式事务:

    (1)若是人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个链接)

    (2)如下状况为自动提交:

       1)正常执行完成的DDL语句:create、alter、drop

       2)正常执行完场的DCL语句GRANT、REVOKE

       3)正常退出的SQLPlus或者SQL Developer等客户端

回滚:

  RollBack只能对未提交的数据撤销,已经Commit的数据是没法撤销的,由于commit以后已经持久化到数据库中。

  

脏读(Dirty Read):事务T1更新了一行数据,尚未提交所作的修改,T2读取更新后的数据,T1回滚,T2读取的数据无效,这种数据称为脏读数据。

不可重复读(UNrepeatable Read):事务T1读取一行数据,T2修改了T1刚刚读取的记录,T1再次查询,发现与第一次读取的记录不相同,称为不可重复读。

幻读(Phantom Read):事务T1读取一条带WHERE条件的语句,返回结果集,T2插入一条新纪录,刚好也是T1的WHERE条件,T1再次查询,结果集中又看到T2的记录,新纪录就叫作幻读。

隔离级别:

  NO_TRANSACTION     不支持事务

  READ_UNCOMMITED    容许脏读、不可重复读、幻读

  READ_COMMITED      容许不可重复读、幻读,不容许脏读

  REPEATABLE       容许幻读,不容许脏读、不可重复读

  SERIALIZABLE       脏读、不可重复读、幻读都不容许

Oracle支持SQL92标准的READ_COMMITED、SERIALIZABLE,自身特有的READ_ONLY

 

锁:

排它锁:(X锁,eXclusive LockS)

  当有DML语句执行的时候,设计的行都会加上排它锁,其余事物不能进行读取修改。

共享锁:(S锁,Shared Locks)

  加了共享锁的数据,能够被其余事物读取,但不能修改。如select语句。

为了保证性能:乐观锁,悲观锁

  悲观锁:每次都是假设数据确定会冲突,数据开始读取时就把数据给锁住。

  乐观锁:每次都是假设通常状况下不会发生数据冲突,只有数据更新提交的时候,才会对数据的冲突与否进行检测,若是发生冲突,返回错误信息让用户处理。

相关文章
相关标签/搜索