我正在尝试将值插入MySQL数据库,我希望该值是查询+ 1的结果。是否有任何方法可以执行此类似于我发布的代码?
INSERT INTO transaction (transactionId,userId)
VALUES
(select (
SELECT max(transactionId) FROM `transaction` WHERE userId = 26) + 1),26)
答案 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
设置为所有用户的自动增量列。这保证了每一行的独特性,并且不会受到竞争条件的影响。