Sql 使用自动分配的主键还是将其设置为“插入”?

Sql 使用自动分配的主键还是将其设置为“插入”?,sql,Sql,我刚才回答了这个问题:。我解释说,为了知道插入到表中的最后一条记录的ID,我要做的是手动插入它,而不是使用一些序列或串行字段 我喜欢做的是在插入之前运行Max(id)查询,在结果中添加1,并将该数字用作我要插入的记录的id 现在,我想问的是:这是个好主意吗?这会给你带来麻烦吗?在IDs字段上使用自动设置字段的原因是什么 注意:这不完全是一个问题,但在帮助中心看来,这似乎是一个好问题。如果您发现它脱离主题,请告诉我,我将删除它。如果实体使用ID作为主键,通常最好让DB自动创建它,因此在代码中创建此

我刚才回答了这个问题:。我解释说,为了知道插入到表中的最后一条记录的ID,我要做的是手动插入它,而不是使用一些序列或串行字段

我喜欢做的是在插入之前运行Max(id)查询,在结果中添加1,并将该数字用作我要插入的记录的id

现在,我想问的是:这是个好主意吗?这会给你带来麻烦吗?在IDs字段上使用自动设置字段的原因是什么


注意:这不完全是一个问题,但在帮助中心看来,这似乎是一个好问题。如果您发现它脱离主题,请告诉我,我将删除它。

如果实体使用ID作为主键,通常最好让DB自动创建它,因此在代码中创建此实体时不需要确定未使用的ID。此外,DateAccessObject(DAO)不需要对ID进行操作。 根据DB u可能使用的内容,甚至可能不允许您检索该表的所有ID


我想可能还有其他很好的理由让DB管理这个部分。

这是个坏主意,在多线程(或多用户)环境中它会失败

请注意,这场辩论还远没有一个具体的最终解决方案——但把它放在一边一分钟——即使您使用了代理键——您永远不应该尝试手动自动递增列。让数据库为您这样做,并避免手动操作时可能出现的各种问题,例如在最佳情况下违反主键约束,或在最坏情况下重复值。

运行
max(id)
是一个非常糟糕的主意。如果您有并发事务(因为所有事务都会看到max()的相同值),那么这将不起作用,而且效率极低。使用序列或标识列是最有效和可扩展的解决方案。