广告
返回顶部
首页 > 资讯 > 数据库 >MySQL自定义序列数的实现方式
  • 515
分享到

MySQL自定义序列数的实现方式

MySQL自定义序列数自定义序列数MySQL自定义序列 2022-12-28 12:12:28 515人浏览 安东尼
摘要

目录Mysql自定义序列数实现创建序列表插入定义的序列自定义函数实现mybatis中调用函数来获取最新序列数mysql添加自定义的序列使用实例总结Mysql自定义序列数实现 往往有很多情况下,我们需要使用自己生成的唯一I

Mysql自定义序列数实现

往往有很多情况下,我们需要使用自己生成的唯一Id或保证不重复的序列号,特别是在高并发的场景下。

为此,很容易想到的实现方式有以下几种:

  • 通过原子操作和机制使用Java代码实现,在单JVM中维护内存中的序列数,另外需要自己保证持久化到外部存储系统;
  • 或者使用能保证分布式并发下一致性的组件ZooKeeper,借助于它的分布式锁很容易实现,缺点是需要在自己的系统或服务中引入Zookeeper的组件依赖,无疑增加了系统复杂度和可维护性(换用Redis也是同理);
  • 另一种容易想到可以利用MySQL的事务操作,存储过程是可以满足事务性的要求,所以这种方式相比于第一种方式更加轻量。

这里介绍采用自定义MySQL序列数的方式来生成唯一Id。

创建序列表

DROP TABLE
  IF EXISTS sequence;
CREATE TABLE
  sequence
  (
    name VARCHAR(50) NOT NULL,
    current_value BIGINT NOT NULL,
    increment INT NOT NULL DEFAULT 1,
    PRIMARY KEY (name)
  )
  ENGINE=InnoDB;

插入定义的序列

INSERT INTO sequence VALUES ('seq1', 0, 1);
INSERT INTO sequence VALUES ('seq2', 0, 1);
...

自定义函数实现

DROP FUNCTioN IF EXISTS `seq`; 
DELIMITER $$ 
CREATE FUNCTION `seq`(seq_name char (20)) returns BIGINT
BEGIN
 UPDATE sequence SET current_value=last_insert_id(current_value + increment) WHERE name=seq_name;
 RETURN last_insert_id();
END $$
DELIMITER ;

MyBatis中调用函数来获取最新序列数

<select id="getRowkeyByName" parameterType="java.lang.String" resultType="long">
  select `seq`(
    #{name}
  )
</select>

MySQL添加自定义的序列

MySQL中也能使用序列,而不是字段的自增长

其实就是自己维护一个表

use aglog;
 
-- 创建公共的序列表
DROP TABLE IF EXISTS t_common_sequence;
CREATE TABLE t_common_sequence (
  seq_name VARCHAR(100) NOT NULL COMMENT '序列名称',
  current_val INT NOT NULL COMMENT '当前值',
  increment_val INT NOT NULL DEFAULT '1' COMMENT '增长值 默认1',
  PRIMARY KEY(seq_name)
)
ENGINE = InnoDB
CHARACTER SET = utf8
COMMENT='公共的序列表';
 
-- 创建函数,获取指定名称的 当前序列值
DELIMITER //
DROP FUNCTION IF EXISTS f_currval;
CREATE FUNCTION f_currval(v_seq_name VARCHAR(100))
RETURNS INT
BEGIN
  DECLARE value INT;
  SET value = 0;
  SELECT current_val into value 
  FROM t_common_sequence
  WHERE seq_name = v_seq_name;
  RETURN value;
END;
//
DELIMITER ;
 
-- 创建函数,获取指定名称的 下一个序列值
DELIMITER //
DROP FUNCTION IF EXISTS f_nextval;
CREATE FUNCTION f_nextval(v_seq_name VARCHAR(100))
RETURNS INT
BEGIN
  UPDATE t_common_sequence
  SET current_val = current_val + increment_val
  WHERE seq_name = v_seq_name;
  RETURN f_currval(v_seq_name);
END;
//
DELIMITER ;
 
-- 创建函数,修改指定名称的序列值,并返回
DELIMITER //
DROP FUNCTION IF EXISTS f_setval;
CREATE FUNCTION f_setval(v_seq_name VARCHAR(100), v_new_val INT)
RETURNS INT
BEGIN
  UPDATE t_common_sequence
  SET current_val = v_new_val
  WHERE seq_name = v_seq_name;
  RETURN f_currval(v_seq_name);
END;
//
DELIMITER ;

使用实例

insert into t_common_sequence(seq_name,current_val,increment_val) values('seq_job',1,1);
commit;
 
 
-- 获取当前序列
select f_currval('seq_job');
 
-- 获取下一个序列
select f_nextval('seq_job');
 
-- 设置序列值,并返回
select f_setval('seq_job',10);
 
select * from t_common_sequence;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL自定义序列数的实现方式

本文链接: https://www.lsjlt.com/news/176035.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL自定义序列数的实现方式
    目录mysql自定义序列数实现创建序列表插入定义的序列自定义函数实现MyBATis中调用函数来获取最新序列数MySQL添加自定义的序列使用实例总结MySQL自定义序列数实现 往往有很多情况下,我们需要使用自己生成的唯一I...
    99+
    2022-12-28
    MySQL自定义序列数 自定义序列数 MySQL自定义序列
  • spring-session自定义序列化方式
    目录spring-session自定义序列化自定义序列方法使用jackson库配置spring-session序列化spring-session序列化问题排查问题解决方法spring...
    99+
    2022-11-12
  • SpringBoot @JsonDeserialize自定义Json序列化方式
    目录@JsonDeserialize自定义Json序列化1.问题2.现象3.解决办法@JsonSerialize与@JsonDeserialize使用1.以注解方式使用2.自定义实现...
    99+
    2022-11-12
  • mysql实现自增序列的方法
    这篇文章主要为大家展示了“mysql实现自增序列的方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql实现自增序列的方法”这篇文章吧。1.创建seque...
    99+
    2022-10-18
  • WordPress 自定义文章列表列的实现方法
    上一篇,我们使用 Meta Box 为文章添加了一个“推荐指数”字段。添加后用了一段时间,似乎不那么方便,编辑文章虽然方便了,但是在文章列表里却不能直观的显示出文章推荐指数,而且不能根据推荐指数来...
    99+
    2022-06-12
    WordPress 自定义 文章列表
  • SpringBoot 如何实现自定义Redis序列化
    目录问题环境入口点实现自定义序列化小结问题 在使用RedisTemplate存储对象时,如果采用JDK默认的序列化方式,数据会出现许多编码字符,辨析度不高。比如一个空的User对象,...
    99+
    2022-11-12
  • mysql使用自定义序列实现row_number功能(步骤详解)
    看了一些文章,终于知道该怎么在 mysql 里面实现 row_number() 排序 话不多说,show you the code: 第一步:建表: create table g...
    99+
    2022-11-12
  • mysql按照自定义(指定顺序)排序的方法实例
    目录一、mysql中实现指定排序需求二、解决方案1:自定义排序实现01. case when 转换实现自定义排序;02:mysql排序函数filed 实现自定义排序(推荐);03:函...
    99+
    2022-11-13
  • 如何自定义Go Json的序列化方法
    这篇文章主要讲解了“如何自定义Go Json的序列化方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何自定义Go Json的序列化方法”吧!我们知道,通过tag,可以...
    99+
    2023-07-02
  • 自定义Go Json的序列化方法译文
    编译自 Custom JSON Marshalling in Go。 前言 我们知道,通过tag,可以有条件地实现定制Go JSON序列化的方式,比如json:"...
    99+
    2022-11-13
  • SpringBoot自定义Redis实现缓存序列化详解
    目录1、自定义RedisTemplate1.1、Redis API默认序列化机制1.2、自定义RedisTemplate序列化机制1.3、效果测试2、自定义RedisCacheMan...
    99+
    2022-11-13
  • SpringBoot怎么自定义Redis实现缓存序列化
    本篇内容主要讲解“SpringBoot怎么自定义Redis实现缓存序列化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot怎么自定义Redis实现缓存序列化”吧!1、自定义Red...
    99+
    2023-07-02
  • Java实现自定义Excel数据排序的方法详解
    目录1.引入jar包2.自定义排序通常,我们可以在Excel中对指定列数据执行升序或者降序排序,排序时可依据单元格中的数值、单元格颜色、字体颜色或图标等。在需要自定义排序情况下,我们...
    99+
    2022-11-13
  • Mysql中自定义函数的创建和执行方式
    目录mysql自定义函数的创建和执行1.创建表,插入数据2.创建函数3.执行函数:select 函数名(参数值);Mysql自定义函数创建失败问题案例总结Mysql自定义函数的创建和执行 假设students表...
    99+
    2023-03-10
    Mysql自定义函数 自定义函数创建 自定义函数执行
  • 表中序列正确的定义方式(表与序列的粘连配置)
    在以数据库指定表方式导出表序列、结构和数据时,发生表结构和数据被导出,序列没有被导出,于是整理了一下说明了序列的正确创建方式一、序列创建方法1.serial primary key方式建立序列 t...
    99+
    2022-10-18
  • mybatis-plus自定义排序的实现
    目录需求:1.导入依赖2.配置文件3.创建分页需要的缓存4.创建实体类5.mapper6.测试7.结果需求: 先时间升序排序,相同的时间在按状态排序,状态的顺序为1 在线 4 潜伏 ...
    99+
    2023-01-09
    mybatis-plus 自定义排序 mybatis-plus 排序
  • 自定义注解+Spel实现分布式锁方式
    目录自定义注解+Spel实现分布式锁依赖RedisLockRegistryConfig自定义注解自定义切面测试类执行结果基于注解的方式实现分布式锁redis分布式锁的实现测试自定义注...
    99+
    2022-11-13
  • vue.js Table 组件自定义列宽实现核心方法
    目录前言colgroup 和 col核心实现一些常量/变量定义初始化表头列表 initColumns处理含有固定宽度和最小宽的列获取各列宽度,并组成一个数组 getWidthList...
    99+
    2022-11-13
  • Android自定义View的三种实现方式总结
    在毕设项目中多处用到自定义控件,一直打算总结一下自定义控件的实现方式,今天就来总结一下吧。在此之前学习了郭霖大神博客上面关于自定义View的几篇博文,感觉受益良多,本文中就参考...
    99+
    2022-06-06
    view Android
  • Spring Boot之Validation自定义实现方式的总结
    目录Validation自定义实现方式Spring Boot Validation定制使用自定义的注解自定义执行Validator自定义Validation注解场景说明源码总结Val...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作