我想回滚一些更改,同时保留之后已完成的其他更改。
n0=20
我想要回滚更改1而不是2但是可以接受围绕我的要求的工作:
由于交易是原子性的,我想严格的答案是否定的,但我要求在这里开展工作。
目前我有一些答案,其中包括将数据保存在临时表中,但它很重且不具有进化性:http://sqlfiddle.com/#!9/64d1f/1
我的问题与以下内容有关:Nested transaction rollback between two savepoints? 但我的限制较少(你可以回答我的问题而不回答这个问题,但回答这一问题肯定会回答我的问题。)
答案 0 :(得分:0)
如果我正确理解您的问题,您希望创建一个自定义审核日志文件,以便对您回滚的内容进行非常精细的控制。 鉴于表中的行只发生了3件事(添加,更改,删除),而不是像这样设计审计日志: Id -auto增量, timestamp -date和添加,更改,删除的时间, 行动 - A,C,D, Table_id - 正在执行的表格, Before_image - 使您想要记录的表中所有字段所需的大小, After_image
从逻辑 如果你 然后INSERT插入正在执行的表和审计日志After_image 更新您从正在操作的表中插入before_image,并在更改时插入after_image。 删除在物理删除之前从正在操作的表中插入before_image
如果要回滚任何或所有这些元素,您在审核日志中有足够的信息来执行此操作。显然,回滚代码与审计日志的插入相反(插入变为删除,更新采用after_image并更新正在执行的表,删除成为从before_img到正在执行的表的插入)。 / p>