mysql序列

近期项目有需要做一个订单号,12位数,其中还是升序的。例如:000000123456,000000123457。

拿到这个需求第一个想到了oracle的序列,但现在项目使用mysql,mysql不支持序列,固写了一个函数生成序列。

函数currval:

CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)
    READS SQL DATA
    DETERMINISTIC
BEGIN  
  
DECLARE VALUE INTEGER;  
  
SET VALUE = 0;  
  
SELECT current_value INTO VALUE FROM sequence WHERE NAME = seq_name;  
  
RETURN VALUE;  
  
END

函数:nextval

CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)
    DETERMINISTIC
BEGIN  
  
UPDATE sequence SET current_value = current_value + increment WHERE NAME = seq_name;  
  
RETURN currval(seq_name);  
  
END

数据库表sequence:

CREATE TABLE `sequence` (
  `name` varchar(50) NOT NULL,
  `current_value` int(11) NOT NULL,
  `increment` int(11) NOT NULL DEFAULT '1'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='序列表,命名s_[table_name]';

做完如上步骤后:

在表中新建数据:如下截图

mysql序列_第1张图片

 

使用:直接执行select nextval("caseCode")

mysql序列_第2张图片

当然并发量大可以使用redis也是可以生成升序数字的。然后大家有什么好建议,提出可以见解一下。

你可能感兴趣的:(mybatis)