Sto cercando di creare un contatore mysql, su un server con PHP, che in sostanza ritorna un numero+1 ogni volta che viene chiamato.
Come fosse un campo autoincrementante, solo che lo voglio manipolare io.
A macro-blocchi avevo pensato
lock table xxx WRITE;
leggi il contatore, incrementalo, scrivilo
unlock tables;
Fin qui bene, non ho problemi di prestazioni in quanto il contatore verrà richiamato 10 o 20 volte al giorno da 5 o 6 client, quindi lock table mi va benissimo... MA
quando c'è un LOCK TABLE in corso gli altri client rimangono "congelati", e questo è bene.
Purtroppo non so se esiste un modo per far andare in timeout dopo un po' la connessione, ho bisogno che se dopo 3 o 5 secondi la richiesta non è andata a buon fine il client "si svegli".
Allora ho provato coi LOCK di mysql, e questo funziona bene, anche perchè c'è la funzione di test rapido che mi consente di "sbloccare" subito un client se il lock è già attivo.
Se risulta libero => provo ad acquisirlo. In pratica spero di avere fortuna, nel caso peggiore aspetto il timeout che è impostabile
codice:
$query='SELECT IS_FREE_LOCK("lock_zconta");';
$result = mysql_query($query, $db) or die('-6');
$row=mysql_fetch_row($result);
if ($row[0]=='0') die('-7');
$query='SELECT GET_LOCK("lock_zconta",5);';
$result = mysql_query($query, $db) or die('-8');
$row=mysql_fetch_row($result);
if ($row[0]=='0') die('-9');
$query = 'SELECT coalesce(max(ultimoid),100000) as massimo from '.$fulltabella;
$result = mysql_query($query, $db) or die(mysql_error('-10'));
$row = mysql_fetch_assoc($result);
$massimo = $row['massimo']+1;
echo $massimo;
$query = 'INSERT into '.$fulltabella.'(ultimoid,modo,richiedente,ip) values ('.$massimo.',"'.$modo.'","'.$richiedente.'","'.$_SERVER["REMOTE_ADDR"].'")';
$result = mysql_query($query, $db) or die(mysql_error('-11'));
$query='SELECT RELEASE_LOCK("lock_zconta");';
$result = mysql_query($query, $db) or die(mysql_error('-12'));
Ma ho notato che il LOCK è sempre libero per le varie connessioni, in quanto immagino che l'utente mysql-php sia sempre quello 
Quindi cerco di formulare la richiesta così:
si può chiedere per mysql una LOCK TABLE WRITE con timeout?
E se no, come posso fare? 
PS aggiungo che questo è ovviamente un frammento, in quanto il contatore lo devo manipolare come mi piace, mentre un autoincrementante "partirebbe" ed andrebbe avanti per i fatti suoi.
Ho tolto la logica che ritorna il contatore, più complessa di un semplice "+1", non è quello che mi interessa.