我有一張存儲需要處理的數據的表。我在表中有ID,狀態,數據。我目前正在瀏覽並選擇ID,數據where status =#。然後,我在選擇後立即進行更新,更改狀態#以便它不會再次被選中。使用perl處理數據 - 使用mysql選擇更新使用情況
我的程序是多線程的,有時我得到的線程獲取相同的ID,因爲它們都是在相對接近的時間查詢表,導致抓取相同的ID。我看着選擇更新,但是,我做了查詢錯誤,或者我不明白它用於什麼。
我的目標是找到一種方法來抓取id,我需要的數據和設置狀態,以便其他線程不會嘗試抓取和處理相同的數據。這是我試過的代碼。 (我寫它一起爲展示目的在這裏。我有我的準備設置在節目的開始,因爲不這樣做會在每次運行時間進行準備,以防萬一有人擔心那裏)
my $select = $db->prepare("SELECT id, data FROM `TestTable` WHERE _status=4 LIMIT ? FOR UPDATE") or die $DBI::errstr;
if ($select->execute($limit))
{
while ($data = $select->fetchrow_hashref())
{
my $update_status = $db->prepare("UPDATE `TestTable` SET _status = ?, data = ? WHERE _id=?");
$update_status->execute(10, "", $data->{_id});
push(@array_hash, $data);
}
}
時我運行這個,如果做多線程,我會得到許多重複的插入,當我嘗試做一個插入後,我處理我的交易數據。
我對mysql和我所做的研究並不熟悉,我還沒有找到任何真正解決這個問題的方法。
謝謝
此外,在這樣做的情況下,我可以處理更新或從表中刪除。 – user985590