mysql里类似sequence_MySql中实现类似Oracle的Sequence方案
项目中使用mysql数据库,功能涉及某信息编号需要从15000开始自增长。
(如内容有分析不正确的地方 ,请指正)
方案一
mysql中建立 sequence_value 表 DAO实现自增长
Create Table
CREATE TABLE `sequence_value` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`seq_name` varchar(60) NOT NULL COMMENT '序列名称',
`seq_id` decimal(20,0) DEFAULT NULL COMMENT '序列号',
`created_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',
`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0正常 1已删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='序列表'
初始化插入序列号名称为“MERCHANT_NUM_SEQ333” ,序列号值为“15000”
Service 调DAO 先查出来 seq_id的值,再update 使其加1
public BigDecimal getMerchantSeq(String seqName) throws BusinessException {
BigDecimal seq = platformMerchantDAO.getMerchantSeq(seqName);
platformMerchantDAO.updateMerchantSeq(seqName);
return seq;
}
但此处考虑多并发问题 可能多个线程访问时获取的值都是相同的 可用上篇文章里的《CountDownLatch 模拟多并发线程简单例子》进行测试
Spring里对Service事务配置为
解决此处多并发方案为:
一、使用同步块
public BigDecimal getMerchantSeq(String seqName) throws BusinessException {
BigDecimal seq = null;
//同步块
synchronized (platformMerchantDAO) {
seq = platformMerchantDAO.getMerchantSeq(seqName);
platformMerchantDAO.updateMerchantSeq(seqName);
}
return seq;
}
存在问题:如果项目为分布式应用部署在多台服务器上,如果底层用到了缓存需将 platformMerchantDAO 存在缓存中 保证此对象共享;如果底层没有用缓存,则此方案不通。
二 、将此Service方法名 getMerchantSeq 修改成不是以get开头的 将走
配置,即每次访问的事务都重新开启新的事务。
三、 将此Service方法getMerchantSeq 里的DAO调换位置 先更新 再查询 (因为查询在数据库中是共享锁 每个事务都可获得,更新是独占锁一个事务使用完之后其他事务才可调用)
方案二
使用Spring的MySQLMaxValueIncrementer 对Mysql实现类似Oracle的Sequence方案
maven依赖为:
org.springframework
spring-jdbc
${spring.version}
其使用方法如下链接 http://blog.csdn.net/heyang78/article/details/2860695
mysql里类似sequence_MySql中实现类似Oracle的Sequence方案相关推荐
- mysql里的die_mysql中die函数的问题
题目: mysql中die函数的问题 $con = mysql_pconnect("59.151.12.43","kxt_db_users","use ...
- mysql 好友关系_【mysql】关系型数据库中好友关系实现的最佳方案是什么?
社交类应用中,每用户与多个好友存在好友关系,设计的最佳方案是什么的呢?数据库白痴求助. 我目前想到的表设计是这样的: CREATE TABLE friend_list ( id INT PRIMARY ...
- mysql 类似 oracle connect by,mysql中实现相仿oracle的SYS_CONNECT_BY_PATH功能
mysql中实现类似oracle的SYS_CONNECT_BY_PATH功能 oracle中的SYS_CONNECT_BY_PATH函数为开发带来了便利,mysql中如何实现类的功能呢? DELIMI ...
- mysql execute immediate_PostgreSQL中function中实现类似Oracle的execute immediate的功能
PostgreSQL中function中实现类似Oracle的execute immediate和dbms_output_putline的功能 首先需要说明的是,PostgreSQL中没有像Oracl ...
- MySQL里和trunc函数相同的_mysql 函数中与Oracle中ltrim函数功能相同的函数是什么函数?...
一.ANSI字符函数 字符函数用于在SQL里以不同于存储方式的格式来表示字符串. 串接就是把两个单独的字符串组合为一个. 子串的概念就是从字符串里提取一部分. TRANSLATE函数用于逐字符地把一个 ...
- mysql sys_connect_by_path_mysql中实现相仿oracle的SYS_CONNECT_BY_PATH功能
mysql中实现类似oracle的SYS_CONNECT_BY_PATH功能 oracle中的SYS_CONNECT_BY_PATH函数为开发带来了便利,mysql中如何实现类的功能呢? DELIMI ...
- mysql中 translate_mysql实现oracle的decode和translate以及管道符拼接
mysql实现oracle的decode和translate以及管道符拼接 发布时间:2020-08-14 03:58:04 来源:ITPUB博客 阅读:122 作者:贺子_DBA时代 目前要把网站整 ...
- mysql里条件语句和循环语句_MySQL与Oracle 差异比较之四条件循环语句
循环语句 编号 类别 oracle Mysql 注释 1 IF语句使用不同 IFiv_weekly_day = 'MON'THEN ii_weekly_day := 'MON'; ELSIFiv_we ...
- sql server 数组_如何在SQL Server中实现类似数组的功能
sql server 数组 介绍 (Introduction) I was training some Oracle DBAs in T-SQL and they asked me how to cr ...
- 微信小程序手把手教你实现类似Android中ViewPager控件效果
微信小程序手把手教你实现类似Android中ViewPager控件效果 前言 需求分析 头部TAB 滑动的内容部分 最终版本 尾巴 前言 在做Android开发的时候,ViewPager是开发者使用频 ...
最新文章
- 单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器
- mysql mysqli 修改_php mysqli 增删改查操作
- muduo网络图书馆评测
- 一种快速构造和获取URL查询参数的方法:URLSearchParams
- pythonplot画多图间隔,matplotlib实现一页多图
- 走进我的交易室08_有条理的交易者
- 《Spring Security3》第四章第一部分翻译下(自定义的UserDetailsServic
- C++中传递数组参数
- EXC_BAD_ACCESS(code=2,address=0xcc 异常解决 及 建议不要在子线程中刷新界面
- Vijos P1816 统计数字【序列处理】
- 算法的优缺点_逻辑回归算法的优缺点
- iOS国际化(多语言)App名称国际化
- TomCat8080/8081端口占用问题!如何解决
- code review流程规范
- gsm 收发短信 打电话
- 前沿 | 国际可视化盛会PacificVis2017的十个精彩案例
- linux 服务器下查看防火墙
- vue 移动端H5微信支付和支付宝支付
- Stetho调试神器使用
- 多邻国(Duolingo)内推,来了!
热门文章
- 三维重建系列之COLMAP: Structure-from-Motion Revisited
- 如何用tomcat发布自己的Java项目
- Hibernate中createCriteria即QBC查询的详细用法
- Spring MVC如何配置OpenSessionInViewInterceptor并结合Hibernate使用
- 彻底抛弃脚本录制,LR脚本之使用web_custom_request函数自定义http请求
- Siverlight 自定义TreeView 显示带连接线的组织结构树
- Python利用os.walk遍历文件夹
- 【LeetCode】【字符串】题号:*8. 字符串转换整数 (atoi)
- 网易编程题——牛牛的闹钟
- Python读取指定文件夹下指定类型数据的文件名并保存到TXT文件中