赞
踩
事务有四大特性,原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Duration)。
原子(atom),在科学上的解释是指化学反应不可再分的基本微粒。原子在化学反应中不可分割,原子构成一般物质的最小单位。
事务的原子性就可以理解为事务在数据库中是一个最小的工作单位,不可再分。一个最小的工作单位的工作结果只能为成果或失败,所以一个事务的结果就只有成功或失败,即在一个事务中,所有的操作必须同时成功,才会成功,反之失败。
事务的一致性指事务的执行不能破坏数据库的完整性和一致性,一个数据库在执行之前和执行之后,必须保证数据库的一致状态。
即一个账户收到一百万人民币,另一个账户必减去一百万人民币。
事务的隔离性是指在并发环境中,并发的事务是互相有隔离等级的,就是说事务的隔离性发生在一个事务操作一个数据时,另一个事务操作同一个事务会因为隔离级别的不同,两个不同的事务会产生不同结果的冲突。
读未提交 read uncommitted
读未提交就是一个事务在操作数据库时,还没有进行提交操作,其它的事务就可以读取到这个事务未提交的操作数据,这就时读未提交。
显而易见,这种事务的隔离级别是相当不安全的,其它的事务会读取到许多无效的数据,对数据库造成不好的影响。这种一个事务可以读取到其它事务未提交的操作数据的现象就叫作脏读。
读已提交 read committed
读已提交就是一个事务只能读取其它事务已经提交的操作数据。(oracle数据库的默认隔离级别就读已提交。)
读已提交解决了读未提交的脏读问题,但是会出现不可重复读的新问题。
不可重复读:一个事务开启时,读取到的数据为三条,这个事务还未结束时,另一个事务对同样的数据提交了更新操作,而这个事务再次读取数据就变成了四条,这就是不可重复读的问题。
可重复读 repeatable read
一个事务执行中看到的数据,总是跟这个事务刚启动时看到的数据保持一致。(mysql的隔离级别就是可重复读)
事务A开启之后,不管是多久,每一次在事务A中读取到的数据都是一致的。即使事务B将数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变,这就是可重复读。
可重复读解决了不可重复读的问题,但是会出现幻读的问题。读取到的数据不够真实。
序列化/串行化 serializable
对一个正在操作数据的事务,其它事务想要操作这些相同的数据,必须得等前面操作完之后其它事务才可以进行操作。
这是最高隔离级别, 每一次读取到的数据都是最真实的,但是这种隔离级别的事务不能并发执行,效率最低。
事务的持久性指事务一旦提交后,数据库中的数据会被永久的保存下来。即使系统服务器奔溃或者服务器宕机,只要数据库能够重新启动,那么一定会将其恢复为事务提交成功结束后的状态。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。