我是某个主机公司的用户,它服务于我的MySql数据库。由于其复制问题,自动增量值增加10,这似乎是一个常见问题。MySql自动增量列增加10个问题
我的问题是如何模拟(安全地)自动增量功能,以便该列有连续的ID?
我的想法是实现一些顺序机制来解决我的问题,但我不知道它是否是一个最佳选择。我在网上发现了这样的代码snipset:
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:[email protected]@auto_increment_offset)[email protected]@auto_increment_increment
ON DUPLICATE KEY
UPDATE `value`=(@val:=`value`)[email protected]@auto_increment_increment;
RETURN @val;
END ;;
DELIMITER ;
这似乎完全正确。我的第二个问题是,如果这个解决方案是并发安全的?当然,INSERT语句是,但是关于ON DUPLICATE KEY更新呢?
谢谢!
什么是“常见问题”?我从来没有听说过这个。 – longneck 2009-11-11 17:08:24
纠正:当然,在代码中,@@ auto_increment_increment将被一些常量(在我的情况下)替换为1.此解决方案用于更一般的问题(如何实现序列)。 – vnx 2009-11-11 17:18:28