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

Mysql 让SQL抛出错误,然后完全处理或防止错误?,mysql,sql,sql-server,error-handling,Mysql,Sql,Sql Server,Error Handling,在我的代码中,我生成一个ID列表,然后将相关数据输入到一个以ID为主键的表中。让SQLServer抛出错误并处理它的完整性错误是更好的做法吗?或者我应该先发制人地检查服务器中是否存在该ID,然后执行插入吗?有些人出于特定的原因使用GUID,但不要将该列作为聚集列,否则除非生成顺序GUID,否则将出现索引碎片……这会使事情复杂化 Guid.NewGuid(); 如果要插入多行且其中一行违反了约束,则通常不会插入任何行 这可能是一种痛苦。因此,您可能希望在同时插入多行之前进行检查。这有助于确保数据

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

有些人出于特定的原因使用GUID,但不要将该列作为聚集列,否则除非生成顺序GUID,否则将出现索引碎片……这会使事情复杂化

Guid.NewGuid();

如果要插入多行且其中一行违反了约束,则通常不会插入任何行

这可能是一种痛苦。因此,您可能希望在同时插入多行之前进行检查。这有助于确保数据有效;当然,当运行真正的查询时,竞争条件仍然会产生问题

也就是说,将检查作为单独的查询进行会增加额外的往返开销。数据库无论如何都要进行检查,因此它是冗余的。而且,由于竞争条件,无法从数据库中删除检查

有些人还喜欢先检查情况是否正常,因此自动递增/标识ID不太可能有间隙。当然,不能保证无间隙,所以这只是减少了产生间隙的一个原因


dbfiddle说明了这些问题。

您使用的是MySQL还是MS SQL Server?