Ero curioso di sapere come si comportano gli script PHP e MySQL? Lo script è fondamentalmente composto da due query SQL.Cosa succede quando uno script PHP accede a un database MySQL allo stesso tempo, più di una volta?
Il primo SELEZIONA e ottiene un numero da una colonna di una riga specifica decisa da qualche ID.
Quindi se il numero è positivo, il secondo AGGIORNA la colonna sottraendo un determinato importo.
Ovviamente questo è un caso classico in cui vorrei usare le transazioni o bloccare o mutex o cosa fare.
Le mie domande è questa: in un sito web è del tutto possibile che due o più utenti di chiamare lo script allo stesso tempo, per la stessa riga. Se non si utilizzano le transazioni o le tabelle di blocco, come verrà elaborato da PHP? Sono due query/chiamate di funzione ma sono in uno script. Attende l'intero script per tornare al suo corrispondente utente per eseguirlo di nuovo per un altro utente o perché sono query diverse a causa di pseudoparallelismo potrebbe eseguire la prima query su più utenti che chiamano lo stesso script e quindi il secondo per un set diverso.
Fondamentalmente sto chiedendo perché sto facendo qualcosa in cui non ho abbastanza permessi per usare transazioni o serrature e voglio sapere se posso evitare un mutex (non sono sicuro della parola, fondamentalmente un nuova tabella per i chiamanti, prima di chiamare lo script sopra chiamerò un nuovo script prima di quello in cui girerò la colonna booleana del tavolo vero per scrivere così gli altri non possono cantare mentre lo script originale finisce e poi bacl su false quindi il prossimo in linea può fare e così via)
Modifica: Non sono sicuro di selezionare per l'aggiornamento se le autorizzazioni sono incluse nel suddetto. Il ragazzo responsabile di rispondere alle mie domande è difficile da trovare e l'ho avuto con me a cercarlo ...
Sì, ho appena ricevuto una risposta che POSSO bloccare i tavoli ... quindi avevi ragione. Per quanto riguarda la P.S, in realtà è quello che sto facendo; usando un riferimento sulla colonna (free = free - {$ diff}) –
Quindi ora so che posso usare SELECT ... FOR UPDATE. Sai come funziona? Il modo in cui l'ho capito blocca le righe del risultato (dalla query di selezione) sia per leggere (selezionare) e scrivere (aggiornamento), ma non sono sicuro quando le rilascerà ... Dopo il prossimo aggiornamento su quelle righe? –
SELECT ... FOR UPDATE funziona solo nelle transazioni. Bloccherà le file fino alla fine della transazione. – sectus