如果表为空,如何插入具有递增值的条目[SQL]



我确实有一个带有条目的Table: Example,如下所示:

Example
entryID: 0, number:1;

如果您要插入一个新条目,并且entryID递增,您将执行以下操作:

INSERT INTO "Example" VALUES(SELECT MAX(entryID)+1 FROM "Example"), 2);

问题:如果Example-Table为空怎么办?如何将逻辑添加到sql中进行检查,如果没有任何逻辑,则添加entryID=0?

首先,此代码在任何数据库中都不起作用:

INSERT INTO "Example"
VALUES (SELECT MAX(entryID)+1 FROM "Example"), 2);

它缺少子查询周围的括号。这更自然地被写成INSERT . . . SELECT,而不是INSERT . . . VALUES。你的问题的狭义答案是COALESCE():

INSERT INTO "Example" (EntryId, Number)
SELECT COALESCE(MAX(entryID) + 1, 1), 2
FROM "Example";

注意INSERT中的列列表。最好的做法是始终包含这些内容。

这是狭义的答案,因为这不是拥有递增id的正确方式。您没有指定数据库,但基本上大多数数据库都有递增id的语法——通常使用identityauto_incrementserialgenerated always as等语法。这是添加增量id的正确方法。

为什么它是正确的方式?在多线程环境中,您的方法可能会导致重复,在该环境中同时进行两次插入。

相关内容

  • 没有找到相关文章