[英]How to use an generated identity in an SQL statement (NetBeans JavaDB)
[英]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.