小编vnx*_*vnx的帖子

MySql自动增量列增加了10个问题

我是一家服务于我的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 ;
Run Code Online (Sandbox Code Playgroud)

这似乎完全正确.我的第二个问题是这个解决方案是否兼并安全?当然是INSERT语句,但是ON DUPLICATE KEY更新呢?

谢谢!

mysql concurrency sequences auto-increment

1
推荐指数
1
解决办法
1478
查看次数

标签 统计

auto-increment ×1

concurrency ×1

mysql ×1

sequences ×1