我确实有一个带有条目的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的语法——通常使用identity
、auto_increment
、serial
或generated always as
等语法。这是添加增量id的正确方法。
为什么它是正确的方式?在多线程环境中,您的方法可能会导致重复,在该环境中同时进行两次插入。