#創建序列表 DROP TABLE IF EXISTS `sequence`; CREATE TABLE `sequence` ( `name` varchar(50) NOT NULL COMMENT '序列名稱', `current_value` bigint(20) NOT NULL COMMENT '序列當前值', `increment` int(11) NOT NULL DEFAULT '1' COMMENT '步長', PRIMARY KEY (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 comment '序列表'; #查詢序列當前值 DELIMITER $$ CREATE #DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS bigint(20) DETERMINISTIC BEGIN DECLARE value VARCHAR(20); SET value = 0; SELECT current_value INTO value FROM sequence WHERE name = seq_name; RETURN value; END$$ DELIMITER ; #取下一個序列號 DELIMITER $$ CREATE #DEFINER=`root`@`%` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS bigint(20) DETERMINISTIC BEGIN UPDATE sequence SET current_value = current_value + increment WHERE name = seq_name;#更新序列號 RETURN currval(seq_name);#取當前序列號 END$$ DELIMITER ; #為序列賦值(初始化序列) DELIMITER $$ CREATE #DEFINER=`root`@`%` FUNCTION `setval`(seq_name VARCHAR(50), value BIGINT) RETURNS bigint(20) DETERMINISTIC BEGIN #初始化更新 UPDATE sequence SET current_value = value WHERE name = seq_name; #返回序列當前值 RETURN currval(seq_name); END$$ DELIMITER ;