项目中使用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方案相关推荐

  1. mysql里的die_mysql中die函数的问题

    题目: mysql中die函数的问题 $con = mysql_pconnect("59.151.12.43","kxt_db_users","use ...

  2. mysql 好友关系_【mysql】关系型数据库中好友关系实现的最佳方案是什么?

    社交类应用中,每用户与多个好友存在好友关系,设计的最佳方案是什么的呢?数据库白痴求助. 我目前想到的表设计是这样的: CREATE TABLE friend_list ( id INT PRIMARY ...

  3. mysql 类似 oracle connect by,mysql中实现相仿oracle的SYS_CONNECT_BY_PATH功能

    mysql中实现类似oracle的SYS_CONNECT_BY_PATH功能 oracle中的SYS_CONNECT_BY_PATH函数为开发带来了便利,mysql中如何实现类的功能呢? DELIMI ...

  4. mysql execute immediate_PostgreSQL中function中实现类似Oracle的execute immediate的功能

    PostgreSQL中function中实现类似Oracle的execute immediate和dbms_output_putline的功能 首先需要说明的是,PostgreSQL中没有像Oracl ...

  5. MySQL里和trunc函数相同的_mysql 函数中与Oracle中ltrim函数功能相同的函数是什么函数?...

    一.ANSI字符函数 字符函数用于在SQL里以不同于存储方式的格式来表示字符串. 串接就是把两个单独的字符串组合为一个. 子串的概念就是从字符串里提取一部分. TRANSLATE函数用于逐字符地把一个 ...

  6. mysql sys_connect_by_path_mysql中实现相仿oracle的SYS_CONNECT_BY_PATH功能

    mysql中实现类似oracle的SYS_CONNECT_BY_PATH功能 oracle中的SYS_CONNECT_BY_PATH函数为开发带来了便利,mysql中如何实现类的功能呢? DELIMI ...

  7. mysql中 translate_mysql实现oracle的decode和translate以及管道符拼接

    mysql实现oracle的decode和translate以及管道符拼接 发布时间:2020-08-14 03:58:04 来源:ITPUB博客 阅读:122 作者:贺子_DBA时代 目前要把网站整 ...

  8. mysql里条件语句和循环语句_MySQL与Oracle 差异比较之四条件循环语句

    循环语句 编号 类别 oracle Mysql 注释 1 IF语句使用不同 IFiv_weekly_day = 'MON'THEN ii_weekly_day := 'MON'; ELSIFiv_we ...

  9. sql server 数组_如何在SQL Server中实现类似数组的功能

    sql server 数组 介绍 (Introduction) I was training some Oracle DBAs in T-SQL and they asked me how to cr ...

  10. 微信小程序手把手教你实现类似Android中ViewPager控件效果

    微信小程序手把手教你实现类似Android中ViewPager控件效果 前言 需求分析 头部TAB 滑动的内容部分 最终版本 尾巴 前言 在做Android开发的时候,ViewPager是开发者使用频 ...

最新文章

  1. 单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器
  2. mysql mysqli 修改_php mysqli 增删改查操作
  3. muduo网络图书馆评测
  4. 一种快速构造和获取URL查询参数的方法:URLSearchParams
  5. pythonplot画多图间隔,matplotlib实现一页多图
  6. 走进我的交易室08_有条理的交易者
  7. 《Spring Security3》第四章第一部分翻译下(自定义的UserDetailsServic
  8. C++中传递数组参数
  9. EXC_BAD_ACCESS(code=2,address=0xcc 异常解决 及 建议不要在子线程中刷新界面
  10. Vijos P1816 统计数字【序列处理】
  11. 算法的优缺点_逻辑回归算法的优缺点
  12. iOS国际化(多语言)App名称国际化
  13. TomCat8080/8081端口占用问题!如何解决
  14. code review流程规范
  15. gsm 收发短信 打电话
  16. 前沿 | 国际可视化盛会PacificVis2017的十个精彩案例
  17. linux 服务器下查看防火墙
  18. vue 移动端H5微信支付和支付宝支付
  19. Stetho调试神器使用
  20. 多邻国(Duolingo)内推,来了!

热门文章

  1. 三维重建系列之COLMAP: Structure-from-Motion Revisited
  2. 如何用tomcat发布自己的Java项目
  3. Hibernate中createCriteria即QBC查询的详细用法
  4. Spring MVC如何配置OpenSessionInViewInterceptor并结合Hibernate使用
  5. 彻底抛弃脚本录制,LR脚本之使用web_custom_request函数自定义http请求
  6. Siverlight 自定义TreeView 显示带连接线的组织结构树
  7. Python利用os.walk遍历文件夹
  8. 【LeetCode】【字符串】题号:*8. 字符串转换整数 (atoi)
  9. 网易编程题——牛牛的闹钟
  10. Python读取指定文件夹下指定类型数据的文件名并保存到TXT文件中