标签:ble 完整性 主键 开发人员 执行 并且 serial 关系 部分
事务四大特征:原子性,一致性,隔离性和持久性。
一个原子事务要么完整执行,要么干脆不执行。这意味着,工作单元中的每项任务都必须正确执行。如果有任一任务执行失败,则整个工作单元或事务就会被终止。即此前对数据所作的任何修改都将被撤销。如果所有任务都被成功执行,事务就会被提交,即对数据所作的修改将会是永久性的。
如果事务无法满足原子性,那么事务必然无法满足一致性。
因为一致性是从逻辑上描述的,原子性是从实现上描述的。
一致性代表了底层数据存储的完整性。它必须由事务系统和应用开发人员共同来保证。事务系统通过保证事务的原子性,隔离性和持久性来满足这一要求; 应用开发人员则需要保证数据库有适当的约束(主键,引用完整性等),并且工作单元中所实现的业务逻辑不会导致数据的不一致(即,数据预期所表达的现实业务情况不相一致)。例如,在一次转账过程中,从某一账户中扣除的金额必须与另一账户中存入的金额相等。
一致性是从逻辑上来描述事务的。
隔离性意味着事务必须在不干扰其他进程或事务的前提下独立执行。换言之,在事务或工作单元执行完毕之前,其所访问的数据不能受系统其他部分的影响。
一言以蔽之,多线程得到的结果跟单线程得到的结果相同。
即,多个同时执行的事务不会因为执行顺序不同导致结果不同。
事务的隔离性有以下几个级别:
其中只有serialization实现隔离性所有要求,在真正实现事务的隔离性。
但考虑到实践,为了性能,数据库厂商做出了这方面的妥协,让使用者可以选择隔离的级别。
不同的隔离级别可以解决不同阶段的问题,是层层递进,逐渐增强的关系。
隔离性为了解决的问题主要有三个(将事务的隔离级别和问题联系在一起理解):
Read Committed可以解决脏读问题,但仍存在以下两种问题。
Repeated Read可以解决不可重复读问题和脏读问题,但仍无法解决下面的问题。
##3、幻读(Phantom Read) : 在同一个事务中,同一个查询多次返回的结果不一致。事务A新增了一条记录,事务B在事务A提交前后各执行了一次查询操作,发现后一次比前一次多了一条记录。幻读仅指由于并发事务增加记录导致的问题,这个不能像不可重复读通过记录加锁解决,因为对于新增的记录根本无法加锁。需要将事务串行化,才能避免幻读。
Serialization解决了以上所有问题,但是性能效率较低。
通常来说,事务隔离级别越低,所需持有锁的时间也就越短,并发性能也就越好。
持久性表示在某个事务的执行过程中,对数据所作的所有改动都必须在事务成功结束前保存至某种物理存储设备。这样可以保证,所作的修改在任何系统瘫痪时不至于丢失。
https://blog.csdn.net/lxqfirst/article/details/7977519
https://www.cnblogs.com/ws-astrologer/p/6681089.html
标签:ble 完整性 主键 开发人员 执行 并且 serial 关系 部分
原文地址:https://www.cnblogs.com/weiyinfu/p/9161948.html