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

Emulazione di una SEQUENZA sicura per le transazioni in MySQL

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.