数据库的事务
数据库事务有4个属性
AICD
A:原子性,要嘛都成功要嘛都失败Atomicity;
C一致性,事务执行前、后数据库状态均一致 Consistency;
I隔离性,事务提交前,数据对其他用户不可见 Isolation
D持久性一旦事务成功,将进行永久的变更,记录与redo日志Durability;
数据库的隔离级别有4种
一种read uncommitted 事务未提交,其他的session 读取相同数据读取的是未提交的数据
一种read committed 事务需要提交其他session 才能读到修改后的数据
一种是 repeatable read 当前session 只会读到自己之前的数据
一种serializable 更新操作会加锁方式其他session 处理同一条数据
1、事务属性AICD:
原子性(Atomicity):整体不可分割性,要么全做要不全不做;一致性(Consistency) :事务执行前、后数据库状态均一致;隔离性(Isolation) :在事务未提交前,它操作的数据,对其它用户不可见(从其他session读取的数据还是commit之前的数据状态);持久性(Durability):一旦事务成功,将进行永久的变更,记录与redo日志;
2、并发与数据读写控制:
当多个会话session同时访问(操作)相同的数据时,将会出现一些超出预期的结果,包括但不限于:
脏读 (Dirty reads) : 当第二个事务select其它事务正在(update)的行时, 第二个事务正在读取的数据还没被确认且数据可能由更新此行的事务所更改,如下图所示:
不可重复度(Non-repeatable reads) :在一个事务过程中,同样的数据被2次读取,并得到不同的值,成为不可重复读,示例如下:
幻读 (Phantom reads):在一个事务中,同样的SQL执行两次时,得到的结果集不同;
3、事务隔离级别:
4、分布式事务
发生在多台数据库之间的事务;通过dblink方式进行事务处理;分布式事务比单机事务要复杂的多;可能的风险:软件,服务器,网络等...不能保证数据一致性,如下:
分布式环境下,数据一致性协议:3PC :通过3个阶段提交方式防止因网络或者容错机制待优导致的脑裂、数据不一致等情况,对应还有2PC
Paxos:N个进程中大多数(超过一半) 进程都认为v是同一个值,例如c,那么我们称v被决定为c
CAP理论: 在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼