使用Mysql函数生成指定的自增序列号


前言

想管理一组从指定大小自增的序列号,想到了新建一张表,并创建一个函数,使其自增
 


一、t_seq

CREATE TABLE `t_seq` (
  `name` varchar(255) NOT NULL COMMENT '序列名称',
  `val` int(10) DEFAULT NULL COMMENT '序列号',
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

二、预置数据

INSERT INTO `t_seq`(`name`, `value`) VALUES ('fund', 10001);

二、创建函数

DROP FUNCT
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用雪花函数替代MySQL自增函数生成唯一的ID,具体步骤如下: 1. 创建一个雪花ID生成器表,表中包含一个雪花ID列和一个计数器列。 CREATE TABLE `snowflake_generator` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `count` int(11) NOT NULL DEFAULT 0, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 2. 插入一条记录,初始计数器为0。 INSERT INTO `snowflake_generator` (`count`) VALUES (0); 3. 使用MySQL的存储过程来生成雪花ID,存储过程中使用MySQL的UUID函数生成一个唯一标识符,然后将其转换为二进制字符串,再将其按照雪花ID的格式进行拼接。 DELIMITER $$ CREATE PROCEDURE `generate_snowflake_id`( OUT `id` VARCHAR(20) ) BEGIN DECLARE `worker_id` INT UNSIGNED DEFAULT 1; DECLARE `data_center_id` INT UNSIGNED DEFAULT 1; DECLARE `timestamp` BIGINT UNSIGNED DEFAULT 0; DECLARE `count` INT UNSIGNED DEFAULT 0; SELECT `count` INTO `count` FROM `snowflake_generator` WHERE `id` = 1 FOR UPDATE; UPDATE `snowflake_generator` SET `count` = `count` + 1 WHERE `id` = 1; SELECT FLOOR(UNIX_TIMESTAMP(NOW(3))*1000) INTO `timestamp`; SET `id` = CONCAT( LPAD(BIN(`timestamp` - 1479533469598), 41, '0'), LPAD(BIN(`data_center_id`), 5, '0'), LPAD(BIN(`worker_id`), 5, '0'), LPAD(BIN(`count`), 12, '0') ); END$$ DELIMITER ; 4. 在需要生成ID的地方,调用存储过程来生成雪花ID。 CALL `generate_snowflake_id`(@id); SELECT @id; 需要注意的是,雪花ID需要满足以下格式要求:第1位为符号位(0表示正数,1表示负数),接下来41位为时间戳(毫秒级),然后是5位数据中心ID、5位机器ID和12位计数器。因此,需要根据实际情况调整存储过程中的参数。此外,使用雪花ID替代自增函数可能会导致一些性能问题,因此需要谨慎使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值