项目的10大JavaScript错误
可能数据的不一致更好理解。例如事务T1、T2同时更新余额为1000余额表, T1减100元,更新余额为900元,T2减500元,更新余额为500元;在T2不知道T1已经更新的情况下直接把余额更新为500元,丢失了T1对余额的更新,此时的数据不能反映真实情况,数据变得不一致。并发事务处理过程中,还可能出现事务T1修改了一条记录,事务T2读取该记录后,事务T1被撤销,此时T2读取的数据就与数据库中的数据不一致,该数据就为“脏”数据。 因此并发操作中,需要确保事务的隔离性以保证数据的一致性。那么如何确保事务的隔离性呢?接下来,我们将对DB2、MySQL和Oracle三种数据库的并发控制机制进行比较分析。 数据库的数据一致性支持机制:事务、锁、日志。 首先我们看看什么是事务。 一、事务 事务:又称为交易,访问数据库系统的可恢复的最小单元。 1、事务的ACID
2、事务的初始化和终止 事务在可执行的SQL第一次执行时会自动初始化,事务一旦初始化,就必须终止(COMMIT或ROLLBACK)。 1)关于事务的COMMIT和ROLLBACK 多数情况下,事务通过执行COMMIT或ROLLBACK终止事务。执行COMMIT语句后,事务初始化后对数据库做出的所有改变都会变成永久的;执行ROLLBACK语句后,事务初始化后对数据库做出的所有改变都会被撤销,数据库返回事务开始之前的状态。 2)关于不成功的事务的结果 上面说了当事务被COMMIT或ROLLBACK终止语句后会发生什么,如果事务完成之前系统发生故障,会发生什么?这种情况下,数据库管理器将撤销所有未COMMIT的修改,从而恢复数据的一致性。 DB2中通过ACTIVE LOG日志文件实现撤销修改。日志文件包含关于事务执行的每个语句的信息,以及事务是否被成功COMMIT或ROLLBACK的信息。 MySQL和Oracle利用undo log撤销修改。undo log记录了行的修改操作,执行事务中由于某种原因失败,或使用ROLLBACK时,就可以利用undo log将数据恢复到修改之前的样子。 3、事务的隔离级别 1)潜在问题 事务为什么需要多种可以设置的隔离级别呢?通常,锁可以实现并发操作中事务的隔离,保证数据的一致性。锁提高了并发性能,但会带来潜在的问题:
在当前数据库的锁机制下不会导致理论意义上的丢失更新问题,但是实际上在所有多用户计算机系统环境下都有可能产生这个问题。例如:
这些问题往往和系统数据库的使用方式和形态有关。而设置事务的隔离级别,就是根据不同的场景来解决以上问题。比如上面所说的丢失更新问题,隔离级别中SELECT…FOR UPDATE即带有更新意图读的时候,步骤1、2都是要上写锁的,避免丢失更新的问题。下面详解数据库的隔离级别及其加锁方式。 2)数据库的隔离级别及其加锁方式 ① SQL标准定义的四个隔离级别
(编辑:江门站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |