一個 MySQL 表可以看作是一個隊列,每一行為一個元素。每次查詢得到滿足某個條件的最前面的一行,并將它從表中刪除或者改變它的狀態(tài),使得下次查詢不會得到它。在沒有并發(fā)訪問的情況下,簡單地用 SELECT 得到一行,再用UPDATE(或者DELETE)語句修改之,就可以實現(xiàn)。
UPDATE targets, (SELECT id FROM targets WHERE status='C' AND schedule<CURRENT_TIMESTAMP ORDER BY schedule ASC LIMIT 1) tmp SET status='D' WHERE targets.id=LAST_INSERT_ID(tmp.id); SELECT * FROM targets WHERE ROW_COUNT()>0 and id=LAST_INSERT_ID();