Essa dica é fresquinha, acabei de implementar agora.
Estou fazendo um sistema de suporte usando o banco MySQL e para criar o código do protocolo minha intenção é que em cada ano o contador comece do 1.
Exemplo: 201300001, 201300002, 201300...
Quando for 2014 que comece tudo de novo, 201400001, 201400002, ...
Crie uma tabela com dois campo, Ano e Valor.
Incrementar o valor com +1 é tranquilo, mas como garantir que dois usuários não peguem o mesmo valor?
Pensei em bloquear o registro para dar um update e pegar o valor atual. Pesquisando como fazer isso, achei dessa maneira que pensei em fazer e uma muito melhor.
Achei a dica aqui
MySQL How To Select and Update in Single Statement - Increment Counter avoiding Race Condition
http://www.sqlines.com/mysql/how-to/select-update-single-statement-race-condition
Usei essa solução
UPDATE counters
SET value = LAST_INSERT_ID(value) + 1
WHERE id = 1;
SELECT LAST_INSERT_ID();
Mas eu não quis usar pegando o valor atual, e sim ele +1
Ficou assim meu update
DECLARE novo_valor INT;
UPDATE seq_protoco
SET valor = LAST_INSERT_ID(valor + 1)
WHERE ano = 2013;
SELECT LAST_INSERT_ID() INTO novo_valor;
Fiquem na Paz!!!
Nenhum comentário:
Postar um comentário