我正在使用 PostgreSQL 和我的所有表设置。我目前有comments
一个名为主键的表,comment_id
其VARCHAR
长度为 4。
我有一个表单设置来向数据库中插入一个新的评论,但我很困惑如何让我的 Java servlet ++ 来自它以前的值的 comment_id。例如 0001 到 0002。
我正在使用 PostgreSQL 和我的所有表设置。我目前有comments
一个名为主键的表,comment_id
其VARCHAR
长度为 4。
我有一个表单设置来向数据库中插入一个新的评论,但我很困惑如何让我的 Java servlet ++ 来自它以前的值的 comment_id。例如 0001 到 0002。
您不想为您的 id 列使用 VARCHAR。在 postgres 中,您可以创建一个序列,然后为每个插入获取该序列的下一个值。
基本上,你会做类似的事情
CREATE SEQUENCE mysequence START 101
然后,当您插入时,您会执行类似的操作
INSERT INTO my_comment values (nextval('mysequence'), 'this is my comment');
使用serial
伪数据类型开始。它自动创建和附加序列对象,并从序列中设置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
. 如果您稍后更改表格布局,您的代码可能会以有害的方式中断。可以跳过临时命令的列列表或保证表结构时(例如在同一事务中创建表时)。除此之外,提供一个列列表!
如果您想要comment_id
返回结果,而无需再次往返服务器:
INSERT INTO my_comment (comment)
VALUES ('My comment here');
RETURNING comment_id;
优秀手册中的详细信息在这里。