mysql序列的创建
本文于 2137 天之前发表,文中内容可能已经过时。
mysql的序列接介绍
mysql中没有像oracle中的序列那样方便,但是我们可以使用特殊的表结构,加上自定义函数来完成相关的功能。
不废话,直接看代码!
1、先创建一个表,用于存储所有的序列。
CREATE TABLE `sequence` (
`sequence_name` varchar(100) NOT NULL COMMENT '序列的名称',
`current_value` int(11) DEFAULT '1' COMMENT '当前值',
`increment` int(11) DEFAULT '1' COMMENT '步长(每次增长的大小)',
PRIMARY KEY (`sequence_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、新增一个自定义函数(UDF),用户快速新增序列
解释:向序列表里边新增一条数据。
CREATE FUNCTION CREATE_SEQ (seq_name VARCHAR(100),step_num INT UNSIGNED)
RETURNS VARCHAR(50)
BEGIN
DECLARE result VARCHAR(100);
DECLARE tempNum INT;
SET result = 'The sequence has exist!';
SET tempNum = (SELECT current_value FROM sequence WHERE sequence_name = seq_name);
IF ISNULL(tempNum)=1 THEN
INSERT INTO sequence (sequence_name,increment) VALUES (seq_name,step_num);
SET result ='CREATED SUCCESS';
END IF;
RETURN result;
END
3、新增一个自定义函数(UDF),用于查找序列
解释:将表中的current_value查找出来,同时将current_value加上步长,用于下次查询。
CREATE FUNCTION next_value(seq_name VARCHAR(100))
RETURNS INT
BEGIN
DECLARE result_num INT;
DECLARE tempNum INT;
SET result_num = 0;
SET tempNum = (SELECT current_value FROM sequence WHERE sequence_name = seq_name);
IF ISNULL(tempNum)=0 THEN
SET result_num=tempNum;
UPDATE sequence SET current_value = current_value+increment WHERE sequence_name = seq_name;
END IF;
RETURN result_num;
END
4、新增一个自定义函数(UDF),用于重置序列
解释:将表中的current_value重置为1,用于下次查询。
CREATE FUNCTION reset_sequence(seq_name VARCHAR(100))
RETURNS VARCHAR(100)
BEGIN
DECLARE result VARCHAR(100);
DECLARE tempNum INT;
SET result = 'NOT EXISTS THIS SEQUENCE!';
SET tempNum = (SELECT current_value FROM sequence WHERE sequence_name = seq_name);
IF ISNULL(tempNum)=0 THEN
UPDATE sequence SET current_value = 1 WHERE sequence_name = seq_name;
SET result = 'RESET SUCCESS';
END IF;
RETURN result;
END
使用的时候直接使用:
select 函数名([参数]);
OK,mysql的序列到此完成,总体来说,此次创建的序列的功能和oracle的序列比较起来,功能还是比较单一,但是提供了另外一种解决问题的思路。
希望看到此博文的同学可以对mysql的序列有一个比较简单的认识,并学会一些mysql的基本使用方法。
加油!