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

Posso atualizar um valor INT + 1 e retornar o novo valor?


Resposta simples - não, não é possível.

Resposta mais longa, sim, se você usar um procedimento armazenado que incrementa o valor para o ID especificado, recupera o novo valor e o retorna.

Acabei de testar isso no MySQL 5.1.59:
CREATE PROCEDURE increment (IN uniqid VARCHAR(255))
BEGIN
   UPDATE `table` SET number = number + 1 WHERE id = uniqid;
   SELECT number FROM `table` WHERE id = uniqid;
END

Uso:
CALL increment(uniqid)

Se vários acessos simultâneos forem possíveis, você pode querer LOCK a tabela primeiro para garantir a atomicidade da operação - o MySQL aparentemente não permite que os procedimentos armazenados bloqueiem as próprias tabelas.