Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Emulando uma SEQUENCE segura para transações no MySQL


Se o incremento automático não for bom o suficiente para suas necessidades, você pode criar um mecanismo de sequência atômica com n sequências nomeadas como esta:

Crie uma tabela para armazenar suas sequências:
CREATE TABLE sequence (
  seq_name varchar(20) unique not null,
  seq_current unsigned int not null
);

Supondo que você tenha uma linha para 'foo' na tabela, você pode obter atomicamente o próximo ID de sequência assim:
UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo';
SELECT @next;

Sem necessidade de fechaduras. Ambas as instruções precisam ser executadas na mesma sessão, para que a variável local @next seja realmente definida quando a seleção acontecer.