如何确保用户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