为每个INSERT增加表ID的值
我正在使用PostgreSQL设置所有表格。 我目前有一个名为comments
的表,其中一个名为comment_id
的主键是一个长度为4的VARCHAR
。
我有一个表单设置插入一个新的注释到数据库但我很困惑,我将如何从我之前的值获取我的Java servlet ++的comment_id。 例如0001到0002。
您不希望将VARCHAR用于id列。 在postgres中,您可以创建一个序列,然后为每个插入获取该序列的下一个值。
这是文档
基本上,你做的事情就像
CREATE SEQUENCE mysequence START 101
然后,当你插入时,你做了类似的事情
INSERT INTO my_comment values (nextval('mysequence'), 'this is my comment');
使用serial
伪数据类型开头。 它自动创建并附加序列对象,并将DEFAULT
设置为序列中的nextval()
。 它可以满足您的所有需求。 列的有效类型是integer
。 也有重要的。 只需点击手册链接即可。
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;
这里有优秀手册的详细信息。