首页 > 技术文章 > 什么是事务,事务的特性,事务的并发问题,事务的隔离级别

xie-qi 2020-05-12 22:16 原文

(1)     什么是事务?

事务就是被绑定在一起,作为一个逻辑工作单元的sql语句组。

(2)     事务的特性(ACID)

①    原子性:是一个逻辑工作单元,要么都成功,要么都失败。如果事务执行过程当中,有任意一个sql语句出现异常,则整个事务回滚。

②    一致性:数据库数据必须从一个一致状态到另外一个一致状态,逻辑上不能出现错误。

     例如转账 张三给李四转100块钱。 如果事务成功,那么张三一定减一百,李四一定加一百。如果事务失败,张三扣的一百一定会滚到原状态。

③    隔离性:一个事务与另外一个事务之间不能相互干扰。通常数据库可以设定不同的事务隔离级别。

④    持久性:事务一旦提交,对数据的修改是永久的。

(3)     事务的并发问题

在多线程的情况下,多个用户同时对一条数据做操作,那么就可能导致数据库操作结果不正确。常见的问题有三个:

①    脏读:A事务读取到了B事务没有提交的数据,如果B事务回滚啦,那么A事务读取到的就是脏数据。我们称之为脏读。

②    不可重复读:在同一个事务中,对同一份数据多次读取的结果不一致。原因在于读取期间,其他事务修改了该数据。事务并发修改导致。

③    幻读:在同一个事务中,多次同样的查询返回的记录条数不同。原因在执行期间,其他事务对记录进行了增加和删除操作。

(4)     为了解决并发问题,数据库提供了事务的隔离级别的设定。主要的隔离级别有四个:

①    读未提交:级别最低,事务能够读取到另外一个事务没提交的内容,不能解决任何并发问题。

②    读已提交:可以避免脏读。

③    可重复读:可以避免脏读和不可重复读。

④    串行化:最高级别。可以避免脏读,不可重复读,和幻读。但是效率低。

Oracle中只有读已提交和串行化两种事务隔离级别。默认是读已提交。

推荐阅读