数据库四大特性:
1. 原子性(Atomicity)
2. 一致性(Consistency)
3. 隔离性(Isolation)
4. 持久性(Durability)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。事务中一个步骤出错,全部回滚,事务执行失败。
例如银行转账操作:A账户向B账户转账100元。
事务开始:
步骤一:A-100;
步骤二:B+100;
事务结束;
只有步骤一和步骤二都成功执行,整个事务才可执行成功,否则失败。因此,原子性从一定程度上确保了数据的安全可靠。
2.一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另外一个一致性状态。当前状态满足预定的约束(完整性约束)就叫做一致性状态。
3.隔离性(Isolation)
隔离性是指多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。并且一个事务处理时的中间状态对其他的事务是不可见的,从而避免出现数据不一致的情况。
数据库通过事务的隔离等级来加大锁的力度,也就是说隔离的等级越高,锁的力度越大,与此同时并发的效率显然会下降。所以要用什么等级的锁,具体还要看业务来定。(乐观锁,悲观锁)
隔离等级
隔离级别 | 脏读 | 不可重复度 | 幻读 |
---|---|---|---|
读未提交(read uncommit) | √ | √ | √ |
读已提交(read commit) | × | √ | √ |
可重复读(repeatable read) | × | × | √ |
可串行化(serializable) | × | × | × |
脏读:当一个事务访问到了另一个事务未提交的数据,称为脏读。
不可重复读:一个事务读取同一条数据多次,得到的数据不一致,称为不可重复读。
幻读:事务1读取某个范围的记录时,事物2在该范围插入了新事物,事物1再次读取该范围内的记录时,会产生幻行。即1在读取的过程中2插入了新的数据。
4.持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。