如何解决如果表为空,如何插入具有递增值的条目[SQL]
我确实有一个带有条目的Table: Example
,如下所示:
Example
entryID: 0,number:1;
如果您要插入一个新条目(条目ID递增),您将执行以下操作:
INSERT INTO "Example" VALUES(SELECT MAX(entryID)+1 FROM "Example"),2);
问题:如果Example-Table
为空怎么办?您如何向逻辑中添加逻辑以进行检查,如果没有,那么添加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
中的列列表。最好始终包含这些内容。
这是 narrow 答案,因为这不是获得递增ID的正确方法。您无需指定数据库,但是基本上大多数数据库都具有增量ID的语法-通常使用identity
,auto_increment
,serial
或generated always as
之类的语法。这是添加增量ID的正确方法。
为什么是正确的方法?您的方法可能会在多线程环境中导致重复,在该环境中,会同时进行两次插入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。