簡體   English   中英

我的GENERATED BY DEFAULT AS IDENTITY的INSERT INTO語句應該如何?

[英]How should my INSERT INTO statement for GENERATED BY DEFAULT AS IDENTITY be?

我試圖將GENERATED BY DEFAULT AS IDENTITY鍵用於表的記錄ID,因為用戶需要自行注冊,並且用戶不能選擇自己的記錄ID。 因此,我決定使用GENERATED BY DEFAULT AS IDENTITY,但我不知道如何編寫INSERT語句。

這是我的用戶表:

CREATE TABLE USER
(
   ID_USER INT NOT NULL GENERATED BY DEFAULT AS IDENTITY,
   USERNAME VARCHAR(20) UNIQUE NOT NULL,
   FORENAME VARCHAR(20) NOT NULL,
   SURNAME VARCHAR(20) NOT NULL,
   PASSWORD VARCHAR(10) NOT NULL,
   USER_TYPE INT NOT NULL,
   PRIMARY KEY(ID_USER),
   FOREIGN KEY (USER_TYPE) REFERENCES USER_TYPES(ID_TYPE)
);

並且用戶將被允許注冊自己。

是即時消息用於我的數據庫

當表已經產生默認列身份就意味着您可以在該列中的值插入,如果你想,但你不必 因此,您可以在插入內容中寫

INSERT INTO ARTIST (ORIGIN,ARTIST_NAME) VALUES ('USA','Nirvana');

供參考: https : //www.ibm.com/support/knowledgecenter/zh/SSEPEK_11.0.0/apsg/src/tpc/db2z_identitycols.html

評論后編輯:

在需要檢索ID的情況下,@ Mathias正確的認為這是一個重復的問題 從該答案中得出的可能解決方案是:

PreparedStatement result = cnx.prepareStatement(
    "INSERT INTO ARTIST (ORIGIN,ARTIST_NAME) VALUES ('USA','Nirvana')",
    RETURN_GENERATED_KEYS);
int updated = result.executeUpdate();
if (updated == 1) {
    ResultSet generatedKeys = result.getGeneratedKeys();
    if (generatedKeys.next()) {
        int key = generatedKeys.getInt(1);
    }
}

其中key具有下一個查詢所需的ID。

這個問題與已經回答的問題略有不同,需要一個不同的答案。

OP指出: user shouldn't be able to choose their own record id 在那種情況下,列定義應該為ID_USER INT NOT NULL GENERATED ALWAYS AS IDENTITY以禁止任何用戶提供的值。

表名不應為USER因為這是保留字。 嘗試使用USERS

insert語句不應插入ID_USER列。 與其他答案中的示例類似,它應列出要插入的列。 下面的例子:

 INSERT INTO USERS (USERNAME, FORENAME, SURNAME, PASSWORD, USER_TYPE)
   VALUES ('JohnSmith','John', 'Smith', 'apasswrdx67', 3)

OP希望使用GUI DatabaseManager將生成的值插入到另一個表中。 這是通過在插入該行后立即使用IDENTITY()函數來完成的。 例如,

 INSERT INTO SOMETABLE (X, Y, Z) VALUES (IDENTITY(), 'some value', 'other value')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM