事务-----四大特性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事务-----四大特性相关的知识,希望对你有一定的参考价值。

事务的第一大特性:原子性(Atomicity)它指一个事务中的所有操作要么都发生,要么都不发生,举个例子,对于银行转账,收款方和发款方必须同时加减同样的money,要么同时加减,要么都不加不减;

 

事务的第二大特性:一致性(Consistency)指在事务中,所有的数据必须保持完整,对于上述的银行转账,不管怎么转账,总钱数是不会变的;

 

事务的第三大特性:隔离性(Isolation)指多个用户并发访问数据库时,用户之间的事务不可以互相干扰,而且多个并发事务之间的数据要相互隔离.否则会产生一些问题,如脏读:一个事务读到了另一个事务未提交的数据,A和B说给他转账成功了,但是A没有提交,这时A可以回滚然后就出现问题了.

 

事务的第四大特性:持久性(Durability)指一个事务一旦被提交,它的所有对数据库数据的操作是永久性变化的,接下来不管数据库本身有什么操作都不会对它由任何影响.

隔离级别:解决问题

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

不可重复读:一个事务读到了另一个事务已经提交的数据,引发另一个事务,在事务中的多次查询结果不一致

虚读/幻读:一个事务读到了另一个事务已经提交的数据.导致另一个事务在事务中多次的查询结果不一致.

1.read uncommitted 读未提交,一个事务读到另一个事务没有提交的数据

存在:3个问题(脏读,不可重复读,虚读)

解决(0个问题)

2.read committed 读已提交,一个事务读到另一个事务已经提交的数据

存在:2个问题(不可重复读,虚读)

解决:1个问题(脏读)

3.repeatable read 可重复读,在一个事务中读到的数据始终保持一致,无论另一个事务是否提交

存在:1个问题(虚读)

解决:2个问题(脏读,不可重复读)

4.serializable 串行化  ,同时只能执行一个事务,相当于事务中的单线程

存在:0个问题

解决:3个问题((脏读,不可重复读,虚读)

 

常见数据库的默认隔离级别:

mysql: repeatable read

Oracle:read  committed

以上是关于事务-----四大特性的主要内容,如果未能解决你的问题,请参考以下文章

事务的四大特性ACID

MySQL:事务四大特性与隔离级别

事务的四大特性

事务四大特性

MySQL中事务四大特性的实现详解

MySQL中事务四大特性的实现详解