SQL自增字段按天/月/年递增策略与定制生成示例
需积分: 49 188 浏览量
更新于2024-09-07
收藏 4KB TXT 举报
在IT行业中,有时候我们需要在非主键字段上实现自增控制,例如按照日期(每天、每月或每年)进行递增,并且允许定制前缀、后缀以及填充位数。这种需求在设计数据库表结构和编写SQL语句时尤为常见。以下是一个针对MySQL数据库实现的示例,展示了如何创建一个名为`man_busi_code`的表,并定义一个存储过程`f_generator_busi_code`来生成按照指定条件自增的业务代码。
首先,我们创建一个`man_busi_code`表,包含以下字段:
1. `busi_type`:整型(int,11位),用于存储类型ID,不能为空,注释为类型标识。
2. `busi_desc`:可变长度字符串(varchar,255位),默认为空,描述性文本。
3. `prefix`:可变长度字符串(varchar,255位),默认为空,用于添加前缀。
4. `suffix`:可变长度字符串(varchar,255位),默认为空,用于添加后缀。
5. `granularity`:整型(int,11位),默认为0,表示是否按照时间粒度自增,1为每日,2为每月,3为每季度,4为每年。
6. `gen_time`:日期类型,用于记录生成时间,默认为空。
7. `gen_val`:整型(int,11位),初始值为1,表示自增序列。
8. `extent`:整型(int,11位),默认为1,控制填充位数。
接下来,我们定义了一个存储过程`f_generator_busi_code`,该过程接受一个输入参数`i_busi_type`(业务类型ID)和一个输出参数`v_code`(生成的业务代码)。这个过程的主要逻辑如下:
- 初始化变量v_cnt为0,用于计数已存在的相同类型的记录。
- 查询当前类型ID下是否存在记录,如果存在,获取`granularity`值。
- 根据`granularity`值决定生成规则:
- 如果`granularity`为0,则直接使用Lpad函数对当前自增值(gen_val+1)进行填充,确保与`extent`指定的位数一致,并拼接前缀和后缀。
- 如果`granularity`非0,则根据具体的时间粒度(每日、每月等)更新`gen_val`并生成代码。
最后,如果发现没有冲突记录,存储过程会生成新的业务代码并将其赋值给输出参数`v_code`。如果存在冲突,存储过程会捕获事务,确保数据的一致性。完成操作后,可以使用这个存储过程来生成新的、符合自定义规则的业务代码。
总结来说,这个示例展示了一种在MySQL中实现非主键自增字段的策略,通过自定义表结构和存储过程,我们可以灵活地控制自增的规则,满足不同场景的需求。这对于数据库设计和业务逻辑管理非常有用,尤其是在需要有序、唯一标识的场景中。
点击了解资源详情
309 浏览量
点击了解资源详情
768 浏览量
8096 浏览量
3390 浏览量
194 浏览量
328 浏览量
585 浏览量

小一猿
- 粉丝: 52
最新资源
- STM32控制FM25L04B铁电存储器源代码解析
- 探索多加密算法的程序实践与源码解析
- C++ 程序POO2021-1DRCR压缩包子文件详解
- JAVA实现大小写转换及温度单位换算示例
- STM32智能加湿器开发指南
- 系统集成工程师考试全程指导高清版
- MATLAB实现RGB转LAB的快照多光谱内窥镜技术
- Spring框架基础教程:搭建Spring MVC简易环境
- eSport Store在线商店应用程序开发
- 掌握OrmLite数据库一对多关系的使用技巧
- 极速PDF转Word v2.0.1.0:快速转换,图文混排支持
- JQuery.Gantt 示例:解决日期错位与多时间段显示
- 探索匿名上位机软件的使用方法
- 安卓开发必知:httpclient的两个关键包解析
- GTV ESLint配置指南:强化JavaScript代码规范
- 启源病历书写系统v6.8:临床医疗文书的高效解决方案