Grazie, per le risposte (pensavo che il 3d fosse caduto nel dimenticatoio )
Controllando meglio, credo di avere qualche dubbio con le transazioni (InnoDB). Ho fatto un semplice script di test per vedere se le transazioni blocchino la tabella in lettura:
test.php
Codice PHP:
<?php
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('test');
mysql_query("START TRANSITION");
$res = mysql_query("SELECT * FROM test WHERE id=1");
$data = mysql_fetch_assoc($res);
echo $data['num'];
if(!isset($_GET['w']))
sleep(8);
mysql_query("UPDATE test SET test.num=9 WHERE id=1");
mysql_query("COMMIT");
?>
Inizialmente test.num = 8. dal browser ho lanciato test.php (pag1) e subito dopo test.php?w=1 (pag2)
Quello che mi aspettavo e che pag2 attendesse la fine di pag1 e stampasse 9.
Invece sia pag1 che pag2(che non attende) stampano 8....quindi le transazione non credo vadano bene, perchè io devo rendere atomiche la lettura e la scrittura
Quindi credo che resti il lock. SELECT ... FOR UPDATE lo vorrei evitare perchè uso un framework (cakePHP) e non so se riesco ad usarla (vorrei usare i metodi del modello e non dover fare le query 'a mano')
Cmq: secondo voi è giusto l'approccio di scalare le quantità dal db dopo il check-out, oppure considerare come acquistate anche quelle solo nel carrello ? (so che è quasi una domanda esistenziale , ma secondo voi cosa è meglio )