我正在尝试将值插入MySQL数据库,并且我希望该值是查询+ 1的结果。有什么办法可以类似于我发布的代码吗?

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

最佳答案

您可以将查询的短语设置为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设置为对所有用户自动递增的列。这样可以保证每一行的唯一性,并且不会受到比赛条件的影响。

关于mysql - 无论如何,根据选择查询将数据插入表中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40668371/

10-11 02:49