我正在尝试将值插入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/