为每个INSERT增加表ID的值

时间:2012-11-29 22:19:12

标签: java postgresql database-design servlets auto-increment

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

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

2 个答案:

答案 0 :(得分:6)

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

here are the docs

基本上,你会做类似

的事情
CREATE SEQUENCE mysequence START 101

然后,当您插入时,执行类似

的操作
INSERT INTO my_comment values (nextval('mysequence'), 'this is my comment');

答案 1 :(得分:6)

首先使用serial pseudo data type。它会自动创建并附加序列对象,并将DEFAULT设置为序列中的nextval()。它可以满足您的一切需求。列的有效类型为integer。还有bigserial。只需点击手册链接即可。

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的列列表。如果您以后更改表格布局,您的代码可能会以有害的方式破坏。可以跳过ad-hoc命令的列列表或保证表结构(例如在同一事务中创建表时)。除此之外,请提供列表!

如果您希望返回结果comment_id,而无需再往返服务器:

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

优秀手册here中的详细信息。