Função nextval PostgreSQL para MySQL

Achei este artigo da função nextval do MySQL muito útil para adicionar uma função nextval ao MySQL. Um problema que ocorre com isso é que o LAST INSERT ID () não é definido corretamente. Além disso, pode haver um pequeno problema com o bloqueio da mesa. Eu atualizei o código para o seguinte:

CREATE TABLE `sequence_data` (
`sequence_name` varchar(100) NOT NULL,
`sequence_increment` int(11) unsigned NOT NULL DEFAULT 1,
`sequence_min_value` int(11) unsigned NOT NULL DEFAULT 1,
`sequence_max_value` bigint(20) unsigned NOT NULL DEFAULT 18446744073709551615,
`sequence_cur_value` bigint(20) unsigned DEFAULT 1,
`sequence_cycle` boolean NOT NULL DEFAULT FALSE,
PRIMARY KEY
(`sequence_name`)
) ENGINE=MyISAM;


DELIMITER
;;
CREATE FUNCTION
`nextval` (`seq_name` varchar(100)) RETURNS bigint(20) DETERMINISTIC
BEGIN
DECLARE cur_value BIGINT
(20);
SELECT LAST_INSERT_ID
(null) INTO cur_value;
UPDATE sequence_data

SET sequence_cur_value
= LAST_INSERT_ID(
IF
(
(sequence_cur_value + sequence_increment) > sequence_max_value,
IF
(
sequence_cycle
= TRUE,
sequence_min_value
,
NULL

),
sequence_cur_value
+ sequence_increment
)
)
WHERE sequence_name
= seq_name;
SELECT LAST_INSERT_ID
() INTO cur_value;
RETURN cur_value
;
END ;;

Nota: O retorno foi mudado de NOT DETERMINISTICpara DETERMINISTICtrabalhar para as minhas necessidades.