hir*_*ate 3 database algorithm
当我们使用数据库编程时(例如在Java和MySql中),我们应该在插入之前检查重复条目,还是应该插入并捕获重复的异常以向用户发出警报?
在我看来,如果我们进行检查,如果没有重复的条目,我们插入条目,数据库引擎本身再次检查重复的主键.这听起来浪费时间.
你怎么想?
浪费时间并不是你最关心的问题。
我假设不止一个用户(或进程)可以在任何时候访问您的数据库;如果您纯粹依赖“预插入”检查,则不同的用户可能会在您的检查和您的操作之间更改数据库的状态(例如,插入带有您尝试插入的 ID 的记录)。插入语句。
因此,您应该始终以用户友好的方式处理“重复键”错误。
然而,当前的用户界面似乎两者兼而有之——在将数据提交到数据库之前验证数据,并很好地处理数据完整性错误。
这样做有几个原因——其中之一是用户友好,但效率和性能也很重要。在大多数应用程序中,数据库是一种“稀缺资源”,依赖应用程序逻辑的错误是昂贵且低效的。
因此,如果您仅将一条记录插入到单个表中,那么使用“重复键”异常就可以了。如果您使用外键等将多条记录插入到多个表中,并且(希望)有一两个事务,那么使用异常的成本很高,并且可能会产生大量的“回滚”工作。
在 MySQL 上,对事务的不同支持(取决于您使用的版本和存储选项)加剧了这种情况。