数据库编号生成策略:当前日期+顺番
"该资源主要讨论如何在Oracle和MySQL数据库中根据当前日期加上连续的序列号来生成唯一的编号。在数据库表中,这种编号通常用于创建自动递增的主键或者序列,确保每个新记录都能获得一个独特的标识。" 在Oracle和MySQL中,生成这种编号的方法略有不同,但核心思想是相同的:结合当前日期(年月日)和一个顺序号码(通常是六位数字),以确保编号的唯一性。 对于MySQL,这个过程可以通过以下SQL查询实现: ```sql SELECT CASE WHEN MAX(ID) IS NULL THEN CONCAT(date_format(CURRENT_DATE(),'%Y%m%d'),'000001') WHEN date_format(CURRENT_Date(),'%Y%m%d') > max(SUBSTRING(q.ID,1,8)) THEN CONCAT(date_format(CURRENT_DATE(),'%Y%m%d'),'000001') WHEN date_format(CURRENT_Date(),'%Y%m%d') = max(SUBSTRING(q.id,1,8)) THEN CONCAT(date_format(CURRENT_DATE(),'%Y%m%d'), LPAD((substr(max(ID),9)+1),6,0)) END AS MAXID FROM mobileinfoq ``` 这段代码首先检查表`mobileinfoq`中是否有记录。如果没有记录,它会将当前日期转换为`YYYYMMDD`格式,并附加`000001`作为初始序号。如果当前日期大于表中最大的日期部分,同样会生成一个新的日期加`000001`的编号。如果当前日期与最大日期相同,就取最大ID的最后六位(即序列号),加1并使用`LPAD`函数填充零,保持六位长度,以得到下一个序列号。 而在Oracle数据库中,类似的操作可以这样完成: ```sql SELECT CASE WHEN MAX(ID) IS NULL THEN CONCAT(to_char(sysdate,'YYYYMMDD'),'000001') WHEN to_char(sysdate,'YYYYMMDD') > max(substr(q.ID,1,8)) THEN CONCAT(to_char(sysdate,'YYYYMMDD'),'000001') WHEN to_char(sysdate,'YYYYMMDD') = max(substr(q.id,1,8)) THEN CONCAT(to_char(sysdate,'YYYYMMDD'), LPAD((substr(max(ID),9)+1),6,0)) END AS MAXID FROM testq ``` Oracle的语法与MySQL相似,区别在于使用`to_char`函数而非`date_format`,以及系统函数`sysdate`获取当前日期。其他逻辑保持一致。 这些方法在处理大量并发插入时可能会面临挑战,因为它们不是原子操作,可能存在并发问题。在生产环境中,为了确保数据一致性,通常会使用序列(Oracle)或自增字段(MySQL)配合事务处理来解决这类问题。然而,对于低并发或特定场景,上述的SQL查询可以提供一种简单且实用的解决方案。
//没有记录时,当前日期+000001
//当前日期比从数据库取得的最大日期大时, 当前日期+000001
//当前日期等于从数据库取得最大日期,顺番+1
--MySQL
select case when
max(ID) is null
then
CONCAT(date_format(CURRENT_DATE(),'%Y%m%d'),'000001')
when
date_format(CURRENT_Date(),'%Y%m%d')>max(SUBSTRING(q.ID,1,8))
then
CONCAT(date_format(CURRENT_DATE(),'%Y%m%d'),'000001')
when
date_format(CURRENT_Date(),'%Y%m%d')=max(SUBSTRING(q.id,1,8))
then
CONCAT(date_format(CURRENT_DATE(),'%Y%m%d'),lpad((substr(max(ID),9)+1),6,0))
end
as MAXID
from
mobileinfo q
--Oracle
select case
when max(ID) is null then
CONCAT(to_char(sysdate, 'YYYYMMDD'), '000001')
when to_char(sysdate, 'YYYYMMDD') > max(substr(q.ID, 1, 8)) then
CONCAT(to_char(sysdate, 'YYYYMMDD'), '000001')
when to_char(sysdate, 'YYYYMMDD') = max(substr(q.id, 1, 8)) then
CONCAT(to_char(sysdate, 'YYYYMMDD'),
lpad((substr(max(ID), 9) + 1), 6, 0))
下载后可阅读完整内容,剩余1页未读,立即下载
- 粉丝: 1
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦