java 每次INSERT时表ID的增量值

5cnsuln7  于 2022-11-20  发布在  Java
关注(0)|答案(2)|浏览(147)

我正在使用PostgreSQL和我所有的表设置。我目前有一个表称为comments与一个主键称为comment_id,这是一个VARCHAR的长度为4。
我有一个表单设置来插入一个新的注解到数据库中,但是我不知道如何让我的Java servlet从它以前的值++ comment_id。例如,0001到0002。

fykwrbwg

fykwrbwg1#

你不想对你的id列使用VARCHAR,在postgres中你可以创建一个序列,然后为每次插入获取该序列的下一个值。
here are the docs
基本上,你会做一些

CREATE SEQUENCE mysequence START 101

然后,当您插入时,您可以执行以下操作

INSERT INTO my_comment values (nextval('mysequence'), 'this is my comment');
jfgube3f

jfgube3f2#

更新:在Postgres 10或更高版本中,请考虑改为使用**IDENTITY**列。请参阅:

  • 自动递增表列

开始使用**serial**伪数据类型。它会自动创建并附加序列对象,并将序列中的DEFAULT设置为nextval()。它可以完成所有您需要的操作。列的有效类型是integer。还有bigserialsmallserial(在Postgres 9.2+中)。只需按照手册的链接进行操作。

CREATE TABLE comments (
  comment_id serial PRIMARY KEY
, comment text NOT NULL
);

您可以忽略INSERT命令的列:

INSERT INTO my_comment (comment)
VALUES ('My comment here');

comment_id会自动填入。
但是你应该 * 总是 * 为INSERT命令提供一个目标列列表。如果你以后改变了表的布局,你的查询可能会以有害的方式中断。对于特殊命令或者当表的结构有保证时(比如当你在同一行代码中创建表时),跳过列列表可能是可以的。除此之外,提供一个列列表!
如果您希望返回生成的comment_id,而不需要另一次到服务器的往返:

INSERT INTO my_comment (comment)
VALUES ('My comment here');
**RETURNING** comment_id;

详细说明见说明书here

相关问题