为每个INSERT增加表ID的值

Rya*_*anH 1 java postgresql database-design servlets auto-increment

我正在使用PostgreSQL设置所有表格.我目前有一个名comments为主键的表,comment_id其名称VARCHAR长度为4.

我有一个表单设置插入一个新的注释到数据库但我很困惑,我将如何从我之前的值获取我的Java servlet ++_ comment_id.例如0001到0002.

dig*_*oel 7

您不希望将VARCHAR用于id列.在postgres中,您可以创建一个序列,然后为每个插入获取该序列的下一个值.

这是文档

基本上,你做的事情就像

CREATE SEQUENCE mysequence START 101
Run Code Online (Sandbox Code Playgroud)

然后,当你插入时,你做了类似的事情

INSERT INTO my_comment values (nextval('mysequence'), 'this is my comment');
Run Code Online (Sandbox Code Playgroud)


Erw*_*ter 6

使用serial伪数据类型开头.它自动创建并附加序列对象,并从序列中设置DEFAULTto nextval().它可以满足您的一切需求.列的有效类型是integer.还有bigserial.只需点击手册链接即可.

CREATE TABLE comments (
    comment_id serial PRIMARY KEY
   ,comment text NOT NULL
   );
Run Code Online (Sandbox Code Playgroud)

您可以忽略INSERT命令列:

INSERT INTO my_comment (comment)
VALUES ('My comment here');
Run Code Online (Sandbox Code Playgroud)

comment_id自动填写.
但是你应该总是提供一个列列表INSERT.如果您以后更改表格布局,您的代码可能会以有害的方式破坏.可以跳过ad-hoc命令的列列表或保证表结构(例如在同一事务中创建表时).除此之外,请提供列表!

如果你想得到的结果comment_id,没有另一次往返服务器:

INSERT INTO my_comment (comment)
VALUES ('My comment here');
RETURNING comment_id;
Run Code Online (Sandbox Code Playgroud)

这里有优秀手册的详细信息.