oracle 新增字段id 并赋值32位_优雅的数据库ID设计
数据库表设计是项目开发中逃不掉的问题,每一张表,我们都会设计一个ID主键字段,关于表ID的生成方式,每个人都有自己的见解,我们就来讨论如何优雅的设计数据库ID
自增ID
这种方式用起来最简单,也是很多程序员喜欢用的方式。使用方法:mysql有auto_increment;oracle里有sequence
这种方式的缺点很明显,容易被探测,假设我是一个博客系统,某一遍文章的id=10,那么显示在浏览器上的地址大概是这样子:www.xxxx.com/article?id=10,对于有点程序经验的人来说,他就会直接在浏览器上打www.xxxx.com/article?id=11,id=12等,更甚的可以用postman,jmeter等http测试工具,这样就可以探测出所有的文章。博客文章系统可能还不要紧,但如果是一些商城系统,就容易泄露重要信息,比如系统有多少笔订单,每笔订单的金额、状态都可以被试探出来。
还有一个缺点,当我们在做一个新增操作时,这个ID是数据库自增的,但是代码业务层并不知道,如果我们要拿这个ID做其他操作,这时就只能重新查一遍数据库了。
数据库UUID
这种方式解决了自增ID容易被探测的问题,使用方法:mysql的uuid()函数,生成出来是32位的16进制数,在有生之年不会有重复,如下图:
但是它依然有一个缺点,就是新增操作时,业务层不知道ID,非要重新查一遍数据库才知道。
JAVA生成UUID
这种方式解决了数据库UUID的一个问题,ID是JAVA代码生成的,减少了一次数据库查询。这种方式是大多数项目在使用的方式,具体代码如下
public class UuidUtil { /** * 获得一个UUID */ public static String getUUID(){ String uuid = UUID.randomUUID().toString(); //去掉“-”符号 return uuid.replaceAll("-", ""); }}
优雅的短UUID
JAVA生成UUID的方式虽然已经很通用了,但是依然有一个小缺点,占用的空间太大,所有表的ID都要占用32位的字符。所以我自己设计了一个短UUID,原理就是生成一个8位的62进制数,将所有的数字、大小写字母全部用上(数据库UUID是16进制,只用了数字和6个字母)。代码如下
public class UuidUtil { public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; public static String getShortUuid() { StringBuffer shortBuffer = new StringBuffer(); String uuid = UUID.randomUUID().toString().replace("-", ""); for (int i = 0; i < 8; i++) { String str = uuid.substring(i * 4, i * 4 + 4); int x = Integer.parseInt(str, 16); shortBuffer.append(chars[x % 0x3E]); } return shortBuffer.toString(); }}
生成的ID如下:
将UUID的32位的16进制数,每4位转成62进制,看不懂的直接用就是了,这样的短ID不仅有UUID不重复的特性,还不占用空间,8位ID在一些查询等操作的性能上也优于32位ID,这就是优雅的UUID设计方案。
oracle 新增字段id 并赋值32位_优雅的数据库ID设计相关推荐
- ultraedit许可证id 7位数字_优雅的数据库ID设计
数据库表设计是项目开发中逃不掉的问题,每一张表,我们都会设计一个ID主键字段,关于表ID的生成方式,每个人都有自己的见解,我们就来讨论如何优雅的设计数据库ID 自增ID 这种方式用起来最简单,也是很多 ...
- java 连接 oracle 10_java 怎么把原本连接32位oracle10g换到连接64位oracle10g
经过各种折腾,终于解决了这个问题.参考了各论坛的方案,解决办法如下: 1.格式化电脑,重装操作系统和SQL Server 2012.因为看到有一种说法是64位的SQL Server安装的路径中有pro ...
- 在64位的环境中使用VS建立Web项目进行Oracle连接需要注意WebDev是32位的
我们平时使用的都是32位的机器进行开发,装的都是32位的软件,但是我们的服务器一般都是64位的,所以有时也需要在64位的环境下装一个VS调试程序.最近遇到的一个问题就是一个同事换了一个电脑,用的是X6 ...
- oracle client 11.2.0.3 32位,oracle client 32位/64位下载(Oracl数据库)
今天给大家推荐的这款oracle client软件是一款功能丰富的数据库管理系统,支持32位/64位系统,用户可以通过该Oracl数据库工具执行OCI.OCCI.PRO*C.ODBC和JDBC程序,o ...
- oracle 10g 10.2.0.4 32位升级到64位
32位升到64位有以下几种方法: 1.copy datafile后运行脚本升级 2.rman restore后运行脚本升级 3.通过exp/imp,expdp/impdp的transfer table ...
- 思科模拟器32位_三款另类的68k Mac模拟器
之前说过两个主流的68k Mac模拟器,Mini vMac和BasiliskII.不过它们都没有真正的硬盘模拟,都是通过外置的软驱接口连接的"硬盘".那么这篇文章将介绍三款非主流的 ...
- git 32位_完整的GIT笔记 快速上手小白教程
GIT 是什么? Git 是目前世界上最先进的分布式版本控制系统.并且它是一个免费的.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 什么是版本控制系统 版本控制是一种系统,它跟踪一 ...
- python安装方法32位_【Python】pycharm安装32位win7出现的问题解决办法。
1.安装 PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性,鉴于目前最新版 PyCharm 使用教程较少,为了节约时间,来介绍一下 PyCharm 在 Windows下是如何安装的 ...
- sql server 配置管理器里为什么是32位_死磕 Nginx 系列:Nginx 限流配置
点击上方 Java后端,选择 设为星标 优质文章,及时送达 限流算法:令牌桶算法 算法思想是: 令牌以固定速率产生,并缓存到令牌桶中: 令牌桶放满时,多余的令牌被丢弃: 请求要消耗等比例的令牌才能被处 ...
最新文章
- ontouchevent android,android onTouchEvent处理机制总结(必看)
- [转]一份ASP内存的释放的实验报告
- qchart 图表_QChart双Y轴实时更新曲线图
- html怎么修改锚点的属性,在HTML中设置自定义锚点
- cli vue 卸载_记录使用@vue/cli搭建Vue3项目完整流程
- 对Boost.Asio中异步事件循环的理解
- pdfminer将pdf转为csv
- 汇编语言 写 Hello World
- QChart入门教程-绘制正弦曲线
- ntds(600)ntdsa:系统错误1453配额不足及恢复过程记录
- 函数计算机使用说明,SHARP-EL506P 函数计算器的使用说明
- vue获取上一个页面路由地址
- 喜报|Authing 入选 CNCF Landscape 云原生技术图谱
- 首位文博虚拟宣推官“文夭夭”上岗
- 华为路由器负载均衡_华为OSPF路由负载分担配置示例
- GBase 8a MPP灾备方案
- The development history and future trend of optical fiber communication technology
- ARP是什么?+ARP欺骗 MAC为ff:ff:ff:ff:ff:ff是什么意思
- 全球工业网络安全收入预计2028年达到244.7亿美元
- Java 多态实际操练--使用多态的特征创建不同宠物的玩耍方法