数据科学每日总结--Day10--数据库
数据库
事务调度
定义:事务指的就是用户对数据库的操作。而事务调度主要指的是在实际应用中,多个用户可能同时对数据库进行操作,产生多个事务并发执行。如果不合理调度,可能会出现数据冲突、丢失更新、脏读等问题,影响数据的正确性
ACID属性:
原子性(Atomocity):事务中的所有操作要么全部完成,要么全部不做,不会出现部分完成的情况。比如银行转账,A账户扣钱、B账户加钱,这两个操作要么都成功,要么都失败,不能只完成其中一个。
一致性(Consistency):事务执行前后,数据库都处于一致的状态。事务不能破坏数据库的完整性约束。例如转账后,账户总金额不变,数据不会出现错误或违反约束的情况。
隔离性(Isolation):并发执行多个事务时,各事务之间互不影响,每个事务的中间状态对其他事务不可见。比如,两个用户同时转账,彼此的操作不会互相干扰,最终结果和串行执行一样。
持久性(Durability):事务一旦提交,对数据库的修改就是永久性的,即使系统故障也不会丢失。以转账为例,转账成功后,即使断电或系统崩溃,数据也不会回滚或丢失。
冲突
在事务调度中,冲突指的是两个操作(通常属于不同事务)在同一个数据项上,且至少有一个是写操作时,它们的执行顺序会影响最终结果。
常见的冲突类型:
读-写冲突(RW):一个事务读,另一个事务写同一数据项。
写-读冲突(WR):一个事务写,另一个事务读同一数据项。
写-写冲突(WW):两个事务都写同一数据项。
依赖
依赖是指事务之间由于操作顺序而形成的先后关系。比如,事务T1的某个操作必须在事务T2的某个操作之前执行,否则会影响结果,这就是依赖关系。 依赖通常由冲突产生,如果两个操作冲突,为了保证正确性,必须规定它们的执行顺序,这就形成了依赖。
冲突可串行化
一个调度是冲突可串行化的,指的就是它可以通过交换非冲突操作的顺序,变换成某个串行调度(即所有事务一个一个顺序执行),且结果一致。 一般来说,判断的依据是将所有的冲突指出来,并且写下事务之间的依赖关系,如果事务的依赖关系形成了一个环,即A依赖于B,C依赖于A,B依赖于C,则证明不是冲突可串行化的
