PostgreSQL 9.4表中的唯一ID
问题描述:
我想在PostgreSQL 9.4表中插入唯一的ID记录。PostgreSQL 9.4表中的唯一ID
INSERT INTO ACCOUNT_HISTORY(ID, ACCOUNT_ID, USERNAME, COMMENT, CREATED) VALUES (?, (select ID from ACCOUNT where USER_NAME = ?), ?, ?, CURRENT_DATE)
表
CREATE TABLE ACCOUNT_HISTORY(
ID INTEGER NOT NULL,
ACCOUNT_ID INTEGER,
USERNAME TEXT,
COMMENT TEXT,
CREATED DATE
)
;
CREATE INDEX IX_RELATIONSHIP8 ON ACCOUNT_HISTORY (ACCOUNT_ID)
;
怎样才能为每一个插入查询唯一的ID?
答
使用serial
:
CREATE TABLE ACCOUNT_HISTORY (
ID SERIAL,
ACCOUNT_ID INTEGER,
USERNAME TEXT,
COMMENT TEXT,
CREATED DATE
);
然后,不包括其在insert
声明:
INSERT INTO ACCOUNT_HISTORY(ACCOUNT_ID, USERNAME, COMMENT, CREATED)
SELECT ID, ?, ?, ?, CURRENT_DATE
FROM ACCOUNT
WHERE USER_NAME = ?;
编辑:
如果您在表中有数据(所以你不”不想丢掉它):
create temporary table temp_account_history as
select *
from account_history;
drop account_history;
CREATE TABLE ACCOUNT_HISTORY (
ID SERIAL,
ACCOUNT_ID INTEGER,
USERNAME TEXT,
COMMENT TEXT,
CREATED NOT NULL DEFAULT CURRENT_DATE
);
INSERT INTO ACCOUNT_HISTORY(ACCOUNT_ID, USERNAME, COMMENT, CREATED)
SELECT ACCOUNT_ID, USERNAME, COMMENT, CREATED
FROM TEMP_ACCOUNT_HISTORY;
请注意,这也给CREATED
一个默认值,所以你不必在随后的插入中包含它。
使用此解决方案时,应使用哪种SQL语句进行插入。我如何编辑我的SQL查询? –
@PeterPenzov。 。 。正确重新创建表格。如果表中已有数据,请将其复制到临时表中。删除第一张桌子。重新定义它并将数据重新插入到其中。 –
另一个问题是Oracle数据库的类似解决方案? –