2016-04-30 67 views
0

我想在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?

回答

2

使用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一個默認值,所以你不必在隨後的插入中包含它。

+0

使用此解決方案時,應使用哪種SQL語句進行插入。我如何編輯我的SQL查詢? –

+0

@PeterPenzov。 。 。正確重新創建表格。如果表中已有數據,請將其複製到臨時表中。刪除第一張桌子。重新定義它並將數據重新插入到其中。 –

+0

另一個問題是Oracle數據庫的類似解決方案? –