主键生成流程
2022-11-07 15:46:14 3 举报
主键生成流程是数据库设计中的重要环节。在创建表时,需要为主键字段选择一个合适的数据类型和长度。常用的主键数据类型有整数型(如 INT)和字符串型(如 VARCHAR)。主键的长度应根据实际需求来定,一般建议越长越好,以减少索引碎片和提高查询效率。 在插入数据时,如果未指定主键的值,系统会自动为该记录分配一个唯一的主键值。如果指定了主键的值,系统会检查该值是否已经存在于表中,如果存在则拒绝插入。
作者其他创作
大纲/内容
校验注解参数generatedKey.autoGenerateKey() && fields ≠ null && fields.size() = 1.
N调用http服务asms获取批次流水号【批量获取指定数据表及字段的流水,为了避免高并发下出现死锁的情况,在本获取流水号程序中采用指定值更新递归调用的方式,不使用锁表操作方式】
N
MybatisKeyAttributevoid generate(Businessobject var1)
String[] serialNo = serialNoPool.get(table + column + dateFormat + noFormat)
Y
0bject lockObject = serialNo
加1
先从数据库内存中取是否有已获取的未使用的流水
返回
1.拿到流水号2.缓存流水号数组[0]加1
N递归调用该方法重新获取
存在
判断时间是否和当前时间匹配
entity
<<Interface>>KeyAttributestatic void generateKey(BusinessObject entity)
getBatchSerialNos(req)
((EntityKey)SpringHelper.getBean(EntityKey.class)).getSerialNo(var...)
syn(lockObject )加锁判断1.缓存存在2.缓存中流水未用完【!serialNo[0].equals(serialNo[1])】3.缓存中流水日期和传入日期(当前)匹配
定义数据库表流水缓存池:其用法与数据库最大流水表类似key=表名+字段名+日期格式+数值流水格式value=[流水起始值,流水终止值]其设计意义:1、每次按批次获取流水,获取流水批次后放入缓存对象中,程序在使用时直接从缓存读取,减少数据库与应用之间的交互加快效率2、通过java中同步机制在获取缓存流水时,多线程之间不会出现获取到同一流水的情况3、通过数据库层面数据操作同步机制,在多进程情况下也不会存在获取到同一流水的情况(递归)
<<Interface>>void generate(Businessobject var1)
先从内存中取是否有已获取的未使用的流水
更新数据库
进行单表单字段锁定
BusinessObjectgeneratekey()
BusinessObject
generatekey()
创建
刷新缓存
更新成功?
rsp
0 条评论
下一页