Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso creare una sequenza in MySQL?

Questa è una soluzione suggerita dal Manuale di MySQl :

Se expr viene fornito come argomento a LAST_INSERT_ID(), il valore dell'argomento viene restituito dalla funzione e viene ricordato come valore successivo da restituire da LAST_INSERT_ID(). Questo può essere utilizzato per simulare sequenze:

Crea una tabella per contenere il contatore di sequenza e inizializzalo:

    mysql> CREATE TABLE sequence (id INT NOT NULL);
    mysql> INSERT INTO sequence VALUES (0);

Usa la tabella per generare numeri di sequenza come questo:

    mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
    mysql> SELECT LAST_INSERT_ID();

L'istruzione UPDATE incrementa il contatore di sequenza e fa sì che la chiamata successiva a LAST_INSERT_ID() restituisca il valore aggiornato. L'istruzione SELECT recupera quel valore. La funzione API C mysql_insert_id() può essere utilizzata anche per ottenere il valore. Vedere Sezione 23.8.7.37, "mysql_insert_id()".

È possibile generare sequenze senza chiamare LAST_INSERT_ID(), ma l'utilità di utilizzare la funzione in questo modo è che il valore ID viene mantenuto nel server come ultimo valore generato automaticamente. È multiutente sicuro perché più client possono emettere l'istruzione UPDATE e ottenere il proprio valore di sequenza con l'istruzione SELECT (o mysql_insert_id()), senza influenzare o essere influenzati da altri client che generano i propri valori di sequenza.