Java中事务的基本概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/miao_9/article/details/85166071

1. 什么是事务

一组要么同时执行成功,要么同时执行失败的SQL语句。是数据库操作的一个执行单元。

一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。

2. 事务的特性

事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。

  • 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。比如A向B转账1000元,那么这就一定要保证原子性(要么同时成功,要么同时失败)。
  • 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,一致性与原子性是密切相关的。比如A向B转账,不可能A扣了钱,B却没收到(这就是非一致性)。
  • 隔离性(isolation):一个事务的执行不能被其他事务所影响。比如A和C同时向B转账,那B同一时间只能和一个人交易(同时只能有一个交易在执行)。
  • 持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中。即使此时再执行回滚操作也不能撤消所做的更改。A向B转账,成功以后B的账户就存入了转账数额,在不做其他的操作前提下数据是永久性的。

3. 事务的开始与结束

事务开始于

  • 连接到数据库上,并执行一条DML语句(DELETE、INSERT、UPDATE)
  • 前一个事务结束后,又输入了另一条DML语句

事务结束于

  • 执行COMMIT或ROLLBACK语句
  • 执行一条DDL语句,例如CREATE TABLE语句;在这种情况下会自送执行COMMIT语句
  • 执行一条DCL语句,例如GRANT语句;在这种情况下会自送执行COMMIT语句
  • 断开与数据库的连接
  • 执行了一条DML语句,该语句却失败了;在这种情况下,会为这个无效的DML语句执行ROLLBACK语句

4. 事务的隔离级别——从低到高

  • Read UnCommited(读取未提交)——一个事务在执行过程中可以看到其他事务没有提交的记录,而且能看到其他事务没有提交的记录的更新。
  • Read Commited(读取已提交)——一个事务在执行过程中可以看到其他事务已经提交的记录,而且能看到其他事务对已有记录的更新。
  • Repeatable Read(可重复读)——一个事务在执行过程中可以看到其他事务已经提交的记录,但是不能看到其他事务对已有记录的更新。
  • Serializable(序列化)——一个事务在执行过程中完全看不到其他事务对数据库所做的更新。

隔离级别越高,越能保证数据的完整性和一致性,但对高并发性能影响也越大,故需要合理选择。

猜你喜欢

转载自blog.csdn.net/miao_9/article/details/85166071