有没有办法选择一条记录并在一个查询中更新它?
我试过了:
UPDATE arrc_Voucher
SET ActivatedDT = now()
WHERE (SELECT VoucherNbr, VoucherID
FROM arrc_Voucher
WHERE ActivatedDT IS NULL
AND BalanceInit IS NULL
AND TypeFlag = 'V'
LIMIT 1 )
我希望运行select查询并获取匹配where子句的第一条记录,更新该记录中的ActivatedDT字段,但是我收到以下错误:
1241 - 操作数应包含1列
有什么想法吗?
答案 0 :(得分:3)
怎么样:
UPDATE arrc_Voucher
SET ActivatedDT = NOW()
WHERE ActivatedDT IS NULL
AND BalanceInit IS NULL
AND TypeFlag = 'V'
LIMIT 1;
答案 1 :(得分:0)
UPDATE返回实际更改的行数
您无法选择行并同时更新它,您需要执行两个查询来实现它;获取你的记录,然后更新它。
如果您担心并发进程在某种竞争条件下访问同一行(假设您的用例涉及高流量),您可以考虑其他替代方案,例如locking the table(请注意其他进程需要recover - retry - 如果表在访问时被锁定了)
或者,如果您可以创建存储过程,则可能需要阅读this article或MySQL API documentation。
但是大约99%的时间,这不是必需的,两个查询将毫无问题地执行。