我是靠谱客的博主 笑点低发夹,最近开发中收集的这篇文章主要介绍Mysql创建自增&循环序列(函数实现循环,取next)Mysql创建自增&循环序列(函数实现循环,取next),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Mysql创建自增&循环序列(函数实现循环,取next)
前言
这篇文章是很早之前写的了,现在回过头来看,当时只是想获取主键id。现在都不用这种方式了(mybatis-plus提供 IdWord.getId(),不止这一种方式)。
ps:一般来说,java尽量避免使用函数和存储过程。不流行了是一个原因,最重要的是不好调试和移植。
1:oracle可以直接创建自增循环序列,但是mysql没有序列
2:mysql实现序列的方式:创建序列表(最少要有序列名,序列值、自增值),基于表创建function实现序列功能
3:序列可以干啥–(日期+时间+序列)可以当做业务流水号,唯一标识。
table
创建表的sql,其中min_value和max_value可以去掉
这里创建的是7位自增循环序列,为了简单value直接从1000000(7位)开始。
CREATE TABLE `t_sequence` (
`id` bigint(21) NOT NULL COMMENT '序列号ID',
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '序列名',
`value` bigint(21) NOT NULL COMMENT '序列值',
`increment` int(1) NOT NULL DEFAULT 1 COMMENT '序列自增值 1',
`min_value` bigint(21) NOT NULL DEFAULT 1000000 COMMENT '最小序列值',
`max_value` bigint(21) NOT NULL DEFAULT 9999999 COMMENT '最大序列值',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `id` (`id`) USING BTREE,
UNIQUE KEY `name` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin comment '序列表';
function
先创建一个获取序列当前value的函数
CREATE FUNCTION get_seq_current(seq_name char(100))
RETURNS BIGINT
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE current_value BIGINT;
SET current_value = 0;
SELECT value into current_value FROM t_sequence WHERE name = seq_name;
RETURN current_value;
END;
在创建一个获取序列最大值的函数`
##获取最大value
CREATE FUNCTION get_seq_max(seq_name char(100))
RETURNS BIGINT
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE max BIGINT;
SET max = 0;
SELECT max_value into max FROM t_sequence WHERE name = seq_name;
RETURN max;
END;
最后创建一个获取序列下一个值的函数(在该函数内实现自增以及循环)
CREATE FUNCTION get_seq_next1(seq_name char(100))
RETURNS BIGINT
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
IF(get_seq_current(seq_name) >= get_seq_max(seq_name))THEN
update t_sequence SET value = min_value where name = seq_name;
ELSE
update t_sequence SET value = (value + increment) where name = seq_name;
END IF;
RETURN get_seq_current(seq_name);
END;
效果
当前的数据,序列名:base_number,当前值:9999999
使用函数获取当前的value,得到结果:9999999
使用函数获取下一个value,得到结果:1000000
最后
以上就是笑点低发夹为你收集整理的Mysql创建自增&循环序列(函数实现循环,取next)Mysql创建自增&循环序列(函数实现循环,取next)的全部内容,希望文章能够帮你解决Mysql创建自增&循环序列(函数实现循环,取next)Mysql创建自增&循环序列(函数实现循环,取next)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复