是否依赖于oracle ROLLBACK
命令导入数据的良好做法,验证数据然后执行ROLLBACK
?
我已经为我们的ERP构建了一个数据导入程序,并查看代码,他们将数据插入到真实的表中,进行验证,如果验证失败,它们会执行ROLLBACK。我总是在插入之前验证数据,但只是好奇这是否是一种可以接受的方法?
答案 0 :(得分:0)
这里有几点要记住 -
约束使我们能够保持数据完整性。这意味着约束允许我们在数据库级别本身强制执行业务规则(或至少是最基本的业务规则)。
commit
或rollback
是一种保留或撤消交易中所做更改的方法。如果在一系列成功运行DML语句后发出commit
,则会保留更改。 rollback
语句将撤消更改。
如果在一系列DML语句中,如果其中一个失败,则回滚该特定语句的效果。例如,如果UPDATE
语句更新10行而其中一行违反了重要约束,则不会更新10行中的任何一行。然而,其先前陈述的影响并未被隐含地回滚。
为了保持数据完整性并按照业务要求保留数据,如果任何DML失败,您必须发出手动ROLLBACK
语句。
您在计划中看到的是同样的做法。成功完成交易后,它不会发出ROLLBACK
,但只有在DML失败后,才会仔细查看代码。这确实是一个很好的做法,只有在一切顺利的情况下才能回滚失败并提交。
数据的前端检查确实是任何应用程序的重要组成部分。这可确保输入的数据符合业务角色。即使在这种情况下,也必须应用约束来在数据库级别执行检查。当一些新手对前端进行更改并尝试输入无效数据时,这尤其有用。当有人绕过应用程序并手动输入数据时,这也很有用。因此,总是需要对数据库级别施加约束。