mysql - 让SQL抛出错误然后完全处理或防止错误?

标签 mysql sql sql-server error-handling

在我的代码中,我生成一个 ID 列表,然后将关联的数据输入到一个以 ID 作为主键的表中。让 SQLSever 抛出错误并处理它(完整性错误)是更好的做法吗?或者我应该先检查服务器中是否存在该 ID,然后执行插入?

最佳答案

如果您要插入多行,并且其中一行违反了约束,那么通常不会插入任何行。

这可能会很痛苦。因此,您可能需要在同时插入多行之前进行检查。这有助于保证数据有效;当然,当运行“真实”查询时,竞争条件仍然会产生问题。

也就是说,作为单独的查询进行检查会增加开销(额外的往返)。数据库无论如何都会进行检查(所以它是多余的)。并且,您无法从数据库中删除该检查(因为竞争条件)。

有些人还喜欢先检查一切是否正常,因此自动递增/身份 ID 不太可能出现间隙。当然,不能保证无间隙,因此这只是减少了间隙的一个原因。

This db<>fiddle 说明了这些问题。

关于mysql - 让SQL抛出错误然后完全处理或防止错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55363721/

相关文章:

sql - 为什么 SQL Server GEOGRAPHY 允许经度在 -15069° 和 +15069° 之间?为什么±15069°?

MySQL:排序顺序 "SHOW TABLES"

sql-server - SQL Server 中的 'BETWEEN' 函数是否非常昂贵?

.net - 基于 Microsoft 的现代标准技术堆栈是什么样的?

MySQL : Why is comparing primary key to a randomly generated number not using the index?

php - 如何在编辑表单上加载图像

mysql - 如何提供对数据库子集的公共(public)访问?

php - 如何避免 MySQL InnoDB 中的竞争条件?

sql - 如何将 "DISTINCT ON"与Arel/ActiveRecord结合使用?

c# - 在模拟另一个域帐户时进行调试