一、什么是事务

事务是数据库操作的最小工作单元,是访问或更新数据库中各种数据项的一个程序执行单元。

二、事务的四大特性ACDI

百度百科:

1、原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。

2、一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

3、隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

4、持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

三、不考虑隔离性会产生的三个问题

1、脏读:一个事务读取到了另一个事务未提交的数据

2、不可重复读:一个事务两次读取同一行的数据,结果得到不同状态的结果。比如中间正好另一个事务更新了该数据,所以两次数据不一致。

3、幻读(虚读):一个事务执行两次查询,第二次结果集包含第一次中没有或多出的数据,造成两次结果不一致,只是另一个事务在这两次查询中间插入或删除了数据造成的。

四、四种隔离级别

1、Read Uncommited(读取未提交内容)

读未提交,就是一个事务可以读取另一个未提交事务的数据。

最低级别,以上问题都有可能发生。

2、Read Commited(读取已提交内容)

读提交,就是一个事务要等另一个事务提交后才能读取数据。

只可避免脏读发生。

3、Repeatable Read(重复读)

重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。

在避免了脏读的前提下避免了不可重复读的发生。

4、Serializable(可串行化)

最高的事务隔离级别,在该级别下,事务串行化顺序执行。

可以避免脏读、不可重复读与幻读。但是事务隔离级别效率低下,比较耗数据库性能,一般不使用。
 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐