24/07/2023 - amorosik ha scritto:
Il punto e' che l'autoincrement funziona sull'insert di un nuovo record e quindi ti servono almeno due istruzioni per ‘leggere’ un nuovo ‘codice_cliente’
Serve l'insert del nuovo record e poi serve la select con la quale vai a leggere il nuovo valore di ‘codice_cliente’
E se da codice devo eseguire due operazioni per leggere il nuovo valore, allora e' possibile che qualcun altro abbia gia' avviato un'insert un attimo prima di me, e quando va a fare la select per leggere il nuovo valore, in realta' legge l'ultimo valore disponibile, che e' quello che sto attendendo anch'io
Ma tu hai provato in modo empirico a fare due insert e vedere come mysql gestisce l'indice? O pensi che un sito con mysql dove tutto il mondo inserisce ordini va in palla con un id autoincrement?
Che significa fai l'insert e poi la select?
L'id non viene rilasciato finché non fai il post. A che ti serve fare la select?
Da codice non andrai a mettere nessun id ci pensa mysql.
Esempio parti da zero, fai nuovo record, ci ripensi e annulli, rifai insert, ci ripensi e annulli, così per 10 volte.
Il contatore è ancora a zero.
Tu stai solo istruendo di inserire un record, che verrà confermato su update o post. Prima di allora, se annulli l'inserimento il contatore non va avanti perché ye lo ritrovi in locale in attesa di essere inviato al db.
Fai anche questa prova:
Leggi l'ultimo id, fai una insert (avrai id+1) senza dare post e con la insert ancora aperta esegui una query su id+1 (l'id della insert aperta) e mi dici se ti arriva il record.