mysql 多键sequence_MySQL增多Sequence管理功能
项目应用中,曾有以下一个场景:
接口中要求发送一个int类型的流水号,由于多线程模式,如果用时间戳,可能会有重复的情况(当然概率很小)。
所以想到了利用一个独立的自增的sequence来解决该问题。
当前数据库为:mysql
由于mysql和oracle不太一样,不支持直接的sequence,所以需要创建一张table来模拟sequence的功能,理由sql语句如下:
第一步:创建--Sequence 管理表
DROP TABLE IF EXISTS sequence; CREATE TABLE sequence ( name VARCHAR(50) NOT NULL, current_value INT NOT NULL, increment INT NOT NULL DEFAULT 1, PRIMARY KEY (name) ) ENGINE=InnoDB;
欢迎大家阅读《MySQL增多Sequence管理功能》,跪求各位点评,by 搞代码
第二步:创建--取当前值的函数
DROP FUNCTION IF EXISTS currval; DELIMITER $ CREATE FUNCTION currval (seq_name VARCHAR(50)) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN DECLARE value INTEGER; SET value = 0; SELECT current_value INTO value FROM sequence WHERE name = seq_name; RETURN value; END $ DELIMITER ;
第三步:创建--取下一个值的函数
DROP FUNCTION IF EXISTS nextval; DELIMITER $ CREATE FUNCTION nextval (seq_name VARCHAR(50)) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN UPDATE sequence SET current_value = current_value + increment WHERE name = seq_name; RETURN currval(seq_name); END $ DELIMITER ;
第四步:创建--更新当前值的函数
DROP FUNCTION IF EXISTS setval; DELIMITER $ CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER) RETURNS INTEGER LANGUAGE SQL DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN UPDATE sequence SET current_value = value WHERE name = seq_name; RETURN currval(seq_name); END $ DELIMITER ;
第五步:测试函数功能
当上述四步完成后,可以用以下数据设置需要创建的sequence名称以及设置初始值和获取当前值和下一个值。
INSERT INTO sequence VALUES ('TestSeq', 0, 1);----添加一个sequence名称和初始值,以及自增幅度
SELECT SETVAL('TestSeq', 10);---设置指定sequence的初始值
SELECT CURRVAL('TestSeq');--查询指定sequence的当前值
SELECT NEXTVAL('TestSeq');--查询指定sequence的下一个值
在java代码中,可直接创建sql语句查询下一个值,这样就解决了流水号唯一的问题。
贴出部分代码(已测试通过)
public void testGetSequence() { Connection conn = JDBCUtils.getConnection(url, userName, password); String sql = "SELECT CURRVAL('TestSeq');"; PreparedStatement ptmt = null; ResultSet rs = null; try { ptmt = conn.prepareStatement(sql); rs = ptmt.executeQuery(); int count = 0; while (rs.next()) { count = rs.getInt(1); } System.out.println(count); } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtils.close(rs, ptmt, conn); } }
ps:在应用中,还有一种用java代码去实现模拟自增sequence的方式,具体思路是创建一张存放sequence的table,然后通过java调用sql语句去查询和修改这个table中指定sequence名称的值,这种方式请加上synchronized。具体代码这里就不上传了,因为实现了,未去测试过。
mysql 多键sequence_MySQL增多Sequence管理功能相关推荐
- mysql sequence java_MySQL增加Sequence管理功能
项目应用中,曾有以下一个场景: 接口中要求发送一个int类型的流水号,由于多线程模式,如果用时间戳,可能会有重复的情况(当然概率很小). 所以想到了利用一个独立的自增的sequence来解决该问题. ...
- 给 MySQL 增加 Sequence 管理功能
-- Sequence 管理表 DROP TABLE IF EXISTS sequence; CREATE TABLE sequence ( name VARCHAR(50) NOT NULL, cu ...
- mysql怎么用sequence_mysql实现sequence功能的代码
mysql实现sequence功能 1.建立sequence记录表 CREATE TABLE `sys_sequence` ( `seq_name` varchar(50) CHARACTER SET ...
- php学生成绩管理系统,数据库使用MySQL,包括源代码和数据库SQL文件,具有学生和教师登录管理功能
php学生成绩管理系统,数据库使用MySQL,包括源代码和数据库SQL文件,具有学生和教师登录管理功能 数据库SQL文件 /*Navicat Premium Data TransferSource S ...
- SSM框架+VUE+Mysql实现的疫苗预约接种管理系统(功能包含分角色,登录/注册、疫苗管理、接种点管理、用户管理、疫苗类型管理、我的预约、预约接种管理、关于等)
博客目录 SSM框架+VUE+Mysql实现的疫苗预约接种管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SSM框架+VUE+Mysql实现的疫苗预约接种管理系统 本系统为了解决疫苗线下预 ...
- mysql中外键的作用是什么_mysql外键基本功能与用法详解
本文实例讲述了mysql外键基本功能与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是外键 外键的增加 外键的修改和删除 外键的约束模式 首发日期:2018-04-12 什么是外键: 外键就 ...
- SSM+Mysql实现的共享单车管理系统(功能包含分角色,登录、用户管理、服务点管理、单车管理、分类管理、学生信息管理、单车租赁、信息统计、系统设置等)
博客目录 SSM+Mysql实现的共享单车管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SSM+Mysql实现的共享单车管理系统 本系统一个学校共享单车管理的项目,通过线上系统化的管理, ...
- SSM框架(spring+springmvc+mybatis)+Mysql实现的社区物业管理系统(功能包含分角色,报修管理、抄表管理、车位管理、房屋管理、业主管理、投诉管理、报修统计分析等)
博客目录 SSM框架(spring+springmvc+mybatis)+Mysql实现的社区物业管理系统 实现功能截图 系统功能 使用技术 代码 完整源码 SSM框架(spring+springmv ...
- Javawebservlet+Mysql实现的化妆品售卖系统(功能包含分角色,登录/注册、化妆品列表/商品详情/加入购物车/订单结算付款/地址管理/后台权限管理/商品管理/订单列表等)
博客目录 Javawebservlet+Mysql实现的化妆品售卖系统 实现功能截图 系统功能 使用技术 代码 完整源码 Javawebservlet+Mysql实现的化妆品售卖系统 本系统为了解决化 ...
最新文章
- shell判断false_Python中的True, False条件判断
- 大数据集群问题排查:时间不同步导致hbase regionserver只启动了部分节点的进程
- 《中国人工智能学会通讯》——11.65 双重代价敏感的属性分类模型
- HBase+Phoenix整合入门--集群搭建
- linux 编写完程序吗,linux下编写C++程序
- linux 如何查看进程内用户虚拟空间分布
- 简单api_GraphQL API集成的简要介绍
- UNICODE与ANSI的区别
- GCD学习(五) dispatch_barrier_async
- 管理感悟:听明白不容易
- 个性化推荐系统实践应用
- Excel合并多个文件
- 移动硬盘使用时间、读写速度和坏道查询
- 守望先锋游戏反外挂技术测评
- 2020大学研究生计算机排名,美国大学研究生计算机专业排名2020情况如何?
- 数据结构实训《表达式求值》
- OKRs-E 让目标推进成功率提升200%
- 2022全国大学生物联网设计竞赛火热开启,限量礼品等你来拿
- 基于java实现bilibili视频爬虫
- 从360大战QQ看未来云计算和云存储
热门文章
- C学习笔记-基础数据结构与算法
- 第四周笔记 c++ Boolan
- Java 文件操作-RandomAccessFile
- 备份自己的myeclipse快捷键到需要的环境
- android studio使用ndk,jni随记
- 今日心得:人生就像一杯茶,不会苦一辈子但会苦一阵子
- VS中使用define和undef实现条件编译(csc.exe条件编译)
- Junit 测试时内存溢出解决办法
- java 调用php文件上传_php上传文件,接口是java,go。
- 忘却的旋律java2_[17-8-10]【复杂问题】打不开游戏