[英]Insert data in one table, remove from another, with timestamp condition in mysql
有沒有一種安全的方法可以根據時間戳條件將數據庫條目移動到另一個表(無需先查詢時間)? 為了確保這一點, INSERT INTO
與DELETE
嗎?
NOW()
的值) 可能不同 。 Source
---------------------------------------------
ID | Timeout | Data
---------------------------------------------
1 | 2014-12-31 12:00:00 | foo
2 | 2014-12-31 15:00:00 | bar
3 | 2014-12-31 18:00:00 | foobar
Archive
---------------------------------------------
ID | Data
---------------------------------------------
<?php
beginTransaction();
try {
// Imagine this happens at 2014-12-31 14:59:59(.992) [Entry #2 not copied]
execute( "INSERT INTO Archive (ID, Data)
SELECT ID, Data FROM Source
WHERE Timeout <= NOW()" );
// While here it might be already 2014-12-31 15:00:00(.004) [Entry #2 deleted]
execute("DELTE FROM Source WHERE Timeout <= NOW()");
commit();
}
catch (Exception $e) {
rollBack();
return false;
}
return;
?>
因此,有一種安全的方法可以避免此問題,最好是考慮到性能 (我知道,在這種情況下,php首先可能是錯誤的語言^^)。 幫助非常感謝!
execute("SET @now = NOW()");
execute("
INSERT INTO Archive (ID, Data)
SELECT ID, Data
FROM Source
WHERE Timeout <= @now
");
execute("DELTE FROM Source WHERE Timeout <= @now");
要么
execute("
INSERT INTO Archive (ID, Data)
SELECT ID, Data
FROM Source
WHERE Timeout <= NOW()
");
execute("DELTE FROM Source WHERE Timeout <= (SELECT MAX(Timeout) FROM Archive)");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.