原子性:事务对数据修改,要么全都执行,要么全都不执行。
一致性:事务完成时,必须使所有的数据都保持一致状态。<----这句话不理解
隔离性:事务查看数据时数据所处的状态,必须是另一并发事务修改它之前或之后的状态,事务不会查看中间状态的数据。
持久性:事务完成之后,它对于系统的影响是永久性的。即使出现系统故障该事务也将一直保持。

解决方案 »

  1.   

    数据一致性是数据库最大的特点
    即一个事物开始的时刻起到事物结束,数据库的状态需要保持一致
    例如你开始了一个查询,在这个查询的期间另一个事物把A记录的值由0改成1,然后提交,那么之前那个查询结束后查询结果中A的值仍然是0,而不是1
    对oracle来说,是由undo文件来实现一致性的
      

  2.   


    只有update,delete这种操作会表加上行级锁,select是不会加锁的(当然除了oracle外,很多数据库都曾有多读锁),而且这些一致性不是概念,正如你所说的
    oracle一个事物正在查,另外一个事物修改
    操作不当不尽会引发性能问题,当回带来不可挽救的ora-01555错误
    开发人员一定要清楚的明白这些
      

  3.   

    看到一个说法,感觉说得还算有道理,这东西我也不太理解,坐等正解数据一致性的一个典型实例为外键约束。例如,在外键约束时,首先更新父表中的主键,如果在子表中有数据与该父表记录相关联,那么父表的更新将被终止。同样地,如果试图更新子表的外键列,也会造成更新失败。因为这两个动作都破坏了数据的一致性。无论哪种操作,如果成功执行,都会使数据库中的数据处于逻辑上的不可接受状态。此时的数据一致性的保持,是在出现在语句级,即每条DML语句都会进行校验。 而事务可以包含多条语句,并可以在事务开始执行时将约束设置为延迟校验。以外键约束为例,可以成功避开无法更新父表主键和子表外键的尴尬。但是,提交时,延迟校验将生效,以保持数据一致性。create table vendor(vendor_id integer primary key, vendor_name varchar2(20)); 
    create table po(po_id integer, vendor_id integer, constraint fk_vendor_po foreign key(vendor_id) references vendor deferrable); 
    insert into vendor values(1, 'HK'); 
    insert into po values(1, 1); 
    update vendor set vendor_id = 2; 
    set constraints fk_vendor_po deferred; 
    update vendor set vendor_id = 2; 
    update po set vendor_id = 2; commit;