Se l'incremento automatico non è abbastanza buono per le tue esigenze, puoi creare un meccanismo di sequenza atomica con n sequenze denominate come questa:
Crea una tabella per memorizzare le tue sequenze:
CREATE TABLE sequence (
seq_name varchar(20) unique not null,
seq_current unsigned int not null
);
Supponendo che tu abbia una riga per 'foo' nella tabella, puoi ottenere atomicamente l'ID della sequenza successiva in questo modo:
UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo';
SELECT @next;
Nessun lucchetto richiesto. Entrambe le istruzioni devono essere eseguite nella stessa sessione, in modo che la variabile locale @next sia effettivamente definita quando avviene la selezione.