如何確保用戶a在用戶b訪問用戶a的數據時手動更新他的某些信息,訪問該信息的用戶b獲取正確的更新信息而不是用戶a的陳舊數據。當用戶更新時,確保一個用戶的select語句對另一個用戶是正確的?
我明白事務很好,行級鎖定,我只是想確保我做得正確!
當更新我使用的用戶一個信息,
$dbc -> beginTransaction();
$dbc -> query("SELECT id FROM accounts WHERE id = " . $user['id'] . " FOR UPDATE LIMIT 1");
$q = $dbc -> prepare("UPDATE accounts SET name = ?");
$q -> execute(array($_POST['name']));
$dbc -> commit();
使用上面確實該鎖的用戶一個數據,這樣,當用戶B得到他的數據,用戶一用,
$q = $dbc -> ("SELECT * FROM accounts WHERE id = ?");
$q -> execute(array($_GET['id']));
他會得到正確的更新數據?或者在獲取用戶a的用戶數據時需要使用事務?
我對所有這些鎖和東西都有點困惑,因爲你可能知道嗎?!?
感謝
行將**寫* *只要更新持續,即可鎖定。用戶B會得到正確的數據嗎?取決於他們訪問數據的時刻。您必須意識到併發訪問意味着「我們時間如此接近以至於看起來像是在同一時間」。 – Alfabravo
是否沒有辦法執行用戶-b的select語句來查看用戶-a的信息,該信息只在行未鎖定時執行? – cgwebprojects
它不會幫助你,因爲你不知道用戶A是否已經執行了更新,是嗎? – Alfabravo