IB/FB 事务特性,以及部分误区解释
引入:
本话题的引入话题是
http://community.csdn.net/Expert/topic/3202/3202674.xml?temp=.830044
里面主要是dbExpress (老枪) 与我的讨论。dbExpress (老枪) 对 FB 的批评过于严厉,自认其不够客观,于是开始了...
假设:
我在下文中假设读者对一些数据库术语的理解.此处我不再细化.
目标:
FB 虽然是开源项目.并不是很多开发员会对它的源码以及框架感兴趣.我们这里讨论 FB 源码中的缺陷没实际意义,这个话题加入FB开发新闻组
讨论更实际,但我不是那个级别的 :(
毕竟对我们这类型的开发员(DB应用开发)来说,注意力是我的系统和功能在 IB/FB 上是否能实现?效率?
至于数据库底层对应用开发员来说只是个白猫黑猫的问题.
所以我这个话题的重点是放在事务数据库原理以及 IB/FB 事务实现上.
正文:
话题的中心是数据库著名的四个保证:
一、原子性 -- 事务的一组更新操作(当然也包括单条 update/insert)的结果只能有两种:全部更新和全部不更新.
对于单条 update/insert 这个不难理解.而对于一组更新它反映在 ANSI-SQL(标准化SQL,被绝大多数数据库所支持的SQL规范)中的
committ work/rollback work 上(ANSI-SQL 并没有 begin transaction,它认为一个事务由系统自行开始.fb/ib 也不是使用SQL开始事务的,很
多商业数据库支持嵌套式事务,都引入 begin transaction [name] 显性开始一个事务,fb1.5 也引入了嵌套事务处理).所以原子性在 ib/fb 里
是有正确实现的.