2016-11-18 70 views
0

我想插入一個值到MySQL數據庫,我想要的值是查詢+ 1的結果。有沒有辦法做到這一點類似於我的發佈代碼?無論如何根據選擇查詢將數據插入表中?

INSERT INTO transaction (transactionId,userId) 
VALUES 
    (select (
    SELECT max(transactionId) FROM `transaction` WHERE userId = 26) + 1),26) 

回答

1

您可以短語作爲insert . . . select查詢:

INSERT INTO transaction (transactionId, userId) 
    SELECT max(transactionId) + 1, 26 
    FROM transaction 
    WHERE userId = 26; 

其實,這是更安全:

INSERT INTO transaction (transactionId, userId) 
    SELECT coalesce(max(transactionId) + 1, 1), 26 
    FROM transaction 
    WHERE userId = 26; 

但是,這兩個版本仍具有競爭條件。您應該真的將transactionId設置爲跨越全部用戶的自動增量列。這保證了每行的唯一性,並且不會受到競爭條件的影響。

+0

你是一個救世主! – jh95

+0

是否有一種方法,我可以只爲每個用戶的transactionId自動遞增,使用戶1可以有transactionId 1和用戶2可以有transactionId 1,因爲每行仍然是唯一的? – jh95

+0

@ jh95。 。 。除非你認爲觸發器很容易,否則在SQL中通常不容易。 –

相關問題