是否有基于select查询将数据插入表中?

时间:2016-11-18 02:20:55

标签: mysql sql

我正在尝试将值插入MySQL数据库,我希望该值是查询+ 1的结果。是否有任何方法可以执行此类似于我发布的代码?

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

1 个答案:

答案 0 :(得分: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设置为所有用户的自动增量列。这保证了每一行的独特性,并且不会受到竞争条件的影响。