我有这个查询
SELECT * FROM outbox where Status=0 ;
然后我需要更新所选记录,以便状态应该等于1
即(UPDATE outbox(selected records from SELECT query) SET Status =1
)
任何帮助?
答案 0 :(得分:1)
你可以做类似的事情,发件箱就是你的桌子:
update outbox set Status = 1 where Status = 0
答案 1 :(得分:0)
这比听起来要困难得多。是的,在简单的情况下,你只想到一个用户和一些记录,这似乎很容易。但是,数据库被设计为符合ACID,具有多个用户和多个并发事务,这些事务可能同时影响数据。并且MySQL中没有单一的语句能够满足您的需求(其他数据库支持OUTPUT
子句,RETURNING
或类似的东西。
在MySQL中可以使用的一种结构是将项目放在临时表中,然后进行更新,然后返回它们。以下显示了使用事务的语义:
start transaction;
create temporary table TempOutboxStatus0 as
select *
from outbox
where status = 0;
update outbox o
set status = 1
where status = 0;
select *
from TempOutboxStatus0;
commit;
对于update
,我实际上更喜欢:
where exists (select 1 from TempOutboxStatus0 t where t.outboxid = o.outboxid);
因为它的意图更清晰 - 如果条件略有变化,代码会更安全。
注意:您可能希望使用显式表锁。这些注意事项取决于您使用的存储引擎。
答案 2 :(得分:0)
BEGIN
Start transaction;
SELECT *
FROM
outbox
where
Status = 0 and
Is_Expired = 0 and
Service_ID=p_service_id
order by
Next_Try_Date asc FOR Update;
update outbox
set
Status=1
where
Status = 0 and
Is_Expired = 0 and
Service_ID=p_service_id;
commit;
END
这可能......似乎它适用于我
答案 3 :(得分:-2)
你可以像下面这样做
$sql=mysql_query("SELECT * FROM outbox where `Status`=0");
while($result=mysql_fetch_array($sql))
{
$update="UPDATE `outbox` SET `Status` =1 where
'your column name'='your previous fetched value');
}