是否依赖 oracleROLLBACK
命令导入数据、验证数据然后执行ROLLBACK
?
我已经为我们的 ERP 构建了一个数据导入程序,查看代码,他们将数据插入到真实的表中,进行验证,如果验证失败,他们执行回滚。我总是在插入之前验证数据,但只是好奇这是否是一种可以接受的方法?
是否依赖 oracleROLLBACK
命令导入数据、验证数据然后执行ROLLBACK
?
我已经为我们的 ERP 构建了一个数据导入程序,查看代码,他们将数据插入到真实的表中,进行验证,如果验证失败,他们执行回滚。我总是在插入之前验证数据,但只是好奇这是否是一种可以接受的方法?
这里有几件事要记住-
约束使我们能够保持数据完整性。这意味着约束允许我们在数据库级别本身执行业务规则(或至少是其中最基本的规则)。
Acommit
或 arollback
是一种保留或撤消事务中所做更改的方法。如果您commit
在一系列成功运行的 DML 语句之后发出 a,则更改将被保留。该rollback
声明将撤消更改。
如果在一系列 DML 语句中,如果其中一个语句失败,则该特定语句的效果将回滚。例如,如果一条UPDATE
语句更新了 10 行,其中一个违反了重要约束,则这 10 行中的任何一行都不会更新。然而,它前面的语句的效果并没有隐含地回滚。
为了保持数据完整性并根据业务要求保留数据,ROLLBACK
如果任何 DML 失败,您必须发出手动声明。
您在程序中看到的是相同的做法。ROLLBACK
如果您仔细查看代码,它不会在事务成功后发出,而是在 DML 失败后发出。这确实是回滚失败并仅在一切正常时才提交的好习惯。
对数据的前端检查确实是任何应用程序的重要组成部分。这可确保输入的数据符合业务角色。即使在这种情况下,也必须应用约束以在数据库级别执行检查。这在某些菜鸟对前端进行更改并尝试输入无效数据时特别有用。当有人绕过应用程序并手动输入数据时,这也很有帮助。因此,始终需要在数据库级别上施加约束。