java事务以及支持事务的数据库

来源:互联网 发布:ubuntu安装datautil 编辑:程序博客网 时间:2024/05/19 17:09

事务通常是为了保证数据访问的正确性,由此事务通常与数据库联系,是指一组原子操作集合,即一条SQL语句,一组SQL语句或整个程序。我们通常需要关心的是何时使用数据库事务、怎么使用事务、对应用的性能有何影响

1. 事务基本特征(ACID)

1.1 原子性(Atomic)确保事务中的每个操作要么都执行,要么
撤销都不执行。
1.2一致性(Consistent)确保所有数据的完整性。
1.3隔离性(Isolation)并发事务所作的修改必须与任何其它并发事务所作的修改隔离,确保事务执行过程中对数据的修改,在事务提交之前对其他事务不可见,由此引出另一概念事务的隔离级别。
1.4持久性(Duration)事务提交之后,操作将不能被撤销。
1.5自动提交事务:每条单独的语句都是一个事务。每个语句后都隐含一个commit。 (默认)
1.6显式事务:以begin transaction显示开始,以commit或rollback结束。

**

2.数据库事务(支持事务的数据库)

**
保证事务ACID的特性是其责任,但是支持事务的数据库通常不会严格的符合事务的这些特性,尤其是隔离性,所以为了尽可能的达到隔离性,做出了隔离级别的处理。像oracle,sql server默认事务隔离级别为REPEATABLE READ,mysql默认事务隔离级别为Read Committed。
一般而言,关系型数据库存在多个用户同时存取相同数据库资源的情况,这样出现了对于事务的串行和并行(一个时间内重叠执行)控制,由于并发会破坏ACID的特性。如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。由并发操作带来的数据不一致性包括:丢失数据修改、读”脏”数据(脏读)、不可重复读、产生幻读数据。
丢失数据修改:多个事务同时修改同一条数据,会覆盖上一个事务的修改。
读脏数据:A事务读取B事务未提交的数据,之后B事务对数据进行修改,从而出现了脏数据的读取。
不可重复读:事务A读取某一数据后,B对其做了修改,当A再次读该数据后,得到与前一不同的值。
幻读:事务A按一定条件从数据库中读取某些数据记录后,事务B插入或删除了一些记录,当A再次按相同条件读取数据时,发现记录数不一致。

**

3.java应用中事务处理

**
由于java应用通过JDBC来操作数据库,所以出现了java事务一说。java对于事务的处理提供了三种JDBC事务、JTA(Java Transaction API)事务、容器事务。
JDBC事务机制基于Connection ,通过Connection对象进行事务管理且限于单数据库链接; JTA允许应用程序执行分布式事务处理,通过使用XADataSource来产生数据库连接,产生的连接为一个不支持自动提交的XA连接且支持跨数据库操作,其中,JTA的实现基于标准的分布式事务(一个分布式事务(Distributed Transaction)包括一个事务管理器(transaction manager)和一个或多个资源管理器(resource manager)。一个资源管理器(resource manager)是任意类型的持久化数据存储。事务管理器(transaction manager)承担着所有事务参与单元者的相互通讯的责任。);容器事务局限于EJB应用使用。

阅读全文
0 0
原创粉丝点击