私は MySql データベースを提供するホスト会社のユーザーです。複製の問題により、自動インクリメント値が 10 ずつ増加します。これは一般的な問題のようです。
私の質問は、列が連続した ID を持つように (安全に) 自動インクリメント機能をシミュレートするにはどうすればよいですか?
私の考えは、問題を解決するために何らかのシーケンスメカニズムを実装することでしたが、それが最善の選択肢であるかどうかはわかりません. 私はウェブ上でそのようなコードスニップセットを見つけました:
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 ;
これはまったく正しいようです。2 番目の質問は、このソリューションが並行安全かどうかです。INSERT文はもちろんですが、ON DUPLICATE KEYの更新はどうでしょうか?
ありがとう!