Я пользователь какой-то хост-компании, которая обслуживает мою базу данных MySql. Из-за их проблемы с репликацией значения автоинкремента увеличиваются на 10, что, похоже, является распространенной проблемой.
Мой вопрос: как я могу (безопасно) имитировать функцию автоинкремента, чтобы столбец имел последовательный идентификатор?
Моя идея заключалась в том, чтобы реализовать какой-то механизм последовательности для решения моей проблемы, но я не знаю, является ли это лучшим вариантом. Я нашел такой фрагмент кода через Интернет:
DELIMITER ;;
DROP TABLE IF EXISTS `sequence`;;
CREATE TABLE `sequence` (
`name` CHAR(16) NOT NULL,
`value` BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;;
DROP FUNCTION IF EXISTS `nextval`;
CREATE FUNCTION `nextval`(thename CHAR(16) CHARSET latin1)
RETURNS BIGINT UNSIGNED
MODIFIES SQL DATA
SQL SECURITY DEFINER
BEGIN
INSERT INTO `sequence`
SET `name`=thename,
`value`=(@val:=@@auto_increment_offset)+@@auto_increment_increment
ON DUPLICATE KEY
UPDATE `value`=(@val:=`value`)+@@auto_increment_increment;
RETURN @val;
END ;;
DELIMITER ;
что кажется вполне правильным. Мой второй вопрос: является ли это решение безопасным одновременно? Конечно, оператор INSERT есть, но как насчет обновления ON DUPLICATE KEY?
Спасибо!