Wenn ich eine einfache Aussage als solche für eine InnoDB Tabelle habenInnoDB Select For Update
UPDATE <table> SET locked=1, col2=<Val2> WHERE locked=0
Gibt es eine Notwendigkeit, wirklich FOR UPDATE wähle?
Da InnoDB das Sperren auf Zeilenebene unterstützt, besteht die Möglichkeit einer Kollision, selbst wenn Tausende von Clients gleichzeitig dasselbe Skript ausführen?
Update:
So etwas würde verhindern, dass Schlösser
$dbh = new PDO(DSN, DB_USER, DB_PASS);
$dbh->beginTransaction();
$selQuery = $dbh->prepare("SELECT <col> FROM <table> WHERE status=0 LIMIT 1 FOR UPDATE");
$selQuery->bindColumn(<col1>, $col1);
$selQuery->execute();
$selQuery->fetch(PDO::FETCH_BOUND);
$dbh->query("UPDATE <table> SET status=1 WHERE status=0 LIMIT 1");
$dbh->commit();
Ich aktualisierte die Frage mit Code, der funktionieren sollte. Vielen Dank! –