我是某個主機公司的用戶,它服務於我的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