Como obter o próximo valor de um campo auto-incremental no mysql

Quem trabalha com o Oracle PL/SQL sabe que você pode obter isso através do NextVal() da seqüência, mas como fazer isso no MySQL?

Eu estava tentando gerar um código Hash para ser utilizado como uma referência externamente a um documento – para não exibir o ID interno usado na tabela -, mas não queria utilizar duas consultas (Um insert, e um select para obter o valor inserido).

Para resolver este problema em uma consulta apenas, criei uma função no banco de dados que me retornaria este valor:


CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50))
	RETURNS BIGINT
	LANGUAGE SQL
	NOT DETERMINISTIC
	CONTAINS SQL
	SQL SECURITY DEFINER
	COMMENT ''
BEGIN

DECLARE Value BIGINT;

SELECT
	AUTO_INCREMENT INTO Value
FROM
	information_schema.tables
WHERE
	table_name = TableName AND
	table_schema = DATABASE();

RETURN Value;

END

Para utilizar esta função, basta passar como parâmetro o nome da tabela que se deseja obter o valor do próximo ID (campo auto-incremental):

SELECT getAutoincrementalNextval ('document')

No meu código, para gerar o Hash para o documento, fiz da seguinte forma:

INSERT INTO
    document (Code, Title, Body)
VALUES ( 				
    sha1( concat (convert (now(), char), ' ', getAutoincrementalNextval ('document') ) ),
    'Title',
    'Body'
);

Este código hash foi apenas uma forma de não expor ao usuário o código interno de meu documento. Para gerar um código único eu crio uma pré-imagem SHA-1 baseada na junção da hora atual e o ID do registro.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *