我正在使用PostgreSQL设置所有表格。我目前有一个名为comments
的表,其主键为comment_id
,长度为VARCHAR
。
我有一个表单设置,可以在数据库中插入一个新的注释,但我很困惑我将如何从我之前的值获取我的Java servlet ++_ comment_id。例如。 0001至0002。
答案 0 :(得分:6)
您不希望将VARCHAR用于您的id列。在postgres中,您可以创建一个序列,然后为每个插入获取该序列的下一个值。
基本上,你会做类似
的事情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中的详细信息。