在哪些场景下不建议自增数据库主键

mysql个人学习笔记——主键、唯一键 在总结主键和唯一键之前,先简单介绍一下索引。 索引 对目标数据单独建立一个索引文件,使得对这些数据的查询可以通过索引文件进行快速查询。 意义: 1、提高查询效率 2、约束数据的有效性(唯一性[主键、唯一键]等) 但是由于索引文件可能比数据本身还大,使用索引需综合考虑内存和查询效率问题。 索引种类: 1、主键索引:primary key 2、唯一键索引:unique key 3、全文索引:fullt... 阅读详情

​我们平时建表的时候,一般会像下面这样。

CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', `name` char(10) NOT NULL DEFAULT '' COMMENT '名字', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 复制代码

出于习惯,我们一般会加一列id作为主键,而这个主键一般边上都有个AUTO_INCREMENT, 意思是这个主键是自增的。自增就是i++,也就是每次都加1。

但问题来了。

主键id不自增行不行?

为什么要用自增id做主键?

离谱点,没有主键可以吗?

什么情况下不应该自增?

被这么一波追问,念头都不通达了?

这篇文章,会尝试回答这几个问题。

主键不自增行不行

当然是可以的。比如我们可以把建表sql里的AUTO_INCREMENT去掉。

CREATE TABLE `user` ( `id` int NOT NULL COMMENT '主键', `name` char(10) NOT NULL DEFAULT '' COMMENT '名字', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 复制代码

然后执行

INSERT INTO `user` (`name`) VALUES ('debug'); 复制代码

这时候会报错Field 'id' doesn't have a default value。也就是说如果你不让主键自增的话,那你在写数据的时候需要自己指定id的值是多少,想要主键id是多少就写多少进去,不写就报错。

改成下面这样就好了

INSERT INTO `user` (`id`,`name`) VALUES (10, 'debug'); 复制代码

为什么要用自增主键

我们在数据库里保存的数据就跟excel表一样,一行行似的。

​而在底层,这一行行数据,就是保存在一个个16k大小的页里。

每次都去遍历所有的行性能会不好,于是为了加速搜索,我们可以根据主键id,从小到大排列这些行数据,将这些数据页用双向链表的形式组织起来,再将这些页里的部分信息提取出来放到一个新的16kb的数据页里,再加入层级的概念。于是,一个个数据页就被组织起来了,成为了一棵B+树索引。

​而当我们在建表sql里声明了PRIMARY KEY (id)时,mysql的innodb引擎,就会为主键id生成一个主键索引,里面就是通过B+树的形式来维护这套索引。

到这里,我们有两个点是需要关注的:

  • 数据页大小是固定16k

  • 数据页内,以及数据页之间,数据主键id都是从小到大排序的

由于数据页大小固定了是16k,当我们需要插入一条新的数据,数据页会被慢慢放满,当超过16k时,这个数据页就有可能会进行分裂。

针对B+树叶子节点,如果主键是自增的,那它产生的id每次都比前一次要大,所以每次都会将数据加在B+树尾部,B+树的叶子节点本质上是双向链表,查找它的首部和尾部,时间复杂度O(1)。而如果此时最末尾的数据页满了,那创建个新的页就好。

​如果主键不是自增的,比方说上次分配了id=7,这次分配了id=3,为了让新加入数据后B+树的叶子节点还能保持有序,它就需要往叶子结点的中间找,查找过程的时间复杂度是O(lgn),如果这个页正好也满了,这时候就需要进行页分裂了。并且页分裂操作本身是需要加悲观锁的。总体看下来,自增的主键遇到页分裂的可能性更少,因此性能也会更高。

没有主键可以吗

mysql表如果没有主键索引,查个数据都得全表扫描,那既然它这么重要,我今天就不当人了,不声明主键,可以吗?

嗯,你完全可以不声明主键。

你确实可以在建表sql里写成这样。

CREATE TABLE `user` ( `name` char(10) NOT NULL DEFAULT '' COMMENT '名字' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 复制代码

看起来确实是没有主键的样子。然而实际上,mysql的innodb引擎内部会帮你生成一个名为ROW_ID列,它是个6字节的隐藏列,你平时也看不到它,但实际上,它也是自增的。有了这层兜底机制保证,数据表肯定会有主键和主键索引。

跟ROW_ID被隐藏的列还有trx_id字段,用于记录当前这一行数据行是被哪个事务修改的,和一个roll_pointer字段,这个字段是用来指向当前这个数据行的上一个版本,通过这个字段,可以为这行数据形成一条版本链,从而实现多版本并发控制(MVCC)。有没有很眼熟,这个在之前写的文章里出现过。

有没有建议主键不自增的场景

前面提到了主键自增可以带来很多好处,事实上大部分场景下,我们都建议主键设为自增。

那有没有不建议主键自增的场景呢?

mysql分库分表下的id

聊到分库分表,那我就需要说明下,递增和自增的区别了,自增就是每次都+1,而递增则是新的id比上一个id要大就行了,具体大多少,没关系。

之前写过一篇文章提到过,mysql在水平分库分表时,一般有两种方式。

一种分表方式是通过对id取模进行分表,这种要求递增就好,不要求严格自增,因为取模后数据会被分散到多个分表中,就算id是严格自增的,在分散之后,都只能保证每个分表里id只能是递增的。

​另一种分表方式是根据id的范围进行分表(分片),它会划出一定的范围,比如以2kw为一个分表的大小,那02kw就放在这张分表中,2kw4kw放在另一张分表中,数据不断增加,分表也可以不断增加,非常适合动态扩容,但它要求id自增,如果id递增,数据则会出现大量空洞。举个例子,比如第一次分配id=2,第二次分配id=2kw,这时候第一张表的范围就被打满了,后面再分配一个id,比如是3kw,就只能存到2kw4kw(第二张)的分表中。那我在02kw这个范围的分表,也就存了两条数据,这太浪费了。

​但不管哪种分表方式,一般是不可能继续用原来表里的自增主键的,原因也比较好理解,原来的每个表如果都从0开始自增的话,那好几个表就会出现好几次重复的id,根据id唯一的原则,这显然不合理。

所以我们在分库分表的场景下,插入的id都是专门的id服务生成的,如果是要严格自增的话,那一般会通过redis来获得,当然不会是一个id请求获取一次,一般会按批次去获得,比如一次性获得100个。快用完了再去获取下一批100个。

但这个方案有个问题,它严重依赖redis,如果redis挂了,那整个功能就傻了。

有没有不依赖于其他第三方组件的方法呢?

雪花算法

有,比如Twitter开源的雪花算法。

雪花算法通过64位有特殊含义的数字来组成id。

​首先第0位不用。

接下来的41位是时间戳。精度是毫秒,这个大小大概能表示个69年左右,因为时间戳随着时间流逝肯定是越来越大的,所以这部分决定了生成的id肯定是越来越大的。

再接下来的10位是指产生这些雪花算法的工作机器id,这样就可以让每个机器产生的id都具有相应的标识。

再接下来的12位,序列号,就是指这个工作机器里生成的递增数字。

可以看出,只要处于同一毫秒内,所有的雪花算法id的前42位的值都是一样的,因此在这一毫秒内,能产生的id数量就是 2的10次方✖️2的12次方,大概400w,肯定是够用了,甚至有点多了。

但是!

细心的兄弟们肯定也发现了,雪花算法它算出的数字动不动就比上次的数字多个几百几万的,也就是它生成的id是趋势递增的,并不是严格**+1自增**的,也就是说它并不太适合于根据范围来分表的场景。这是个非常疼的问题。

还有个小问题是,那10位工作机器id,我每次扩容一个工作机器,这个机器怎么知道自己的id是多少呢?是不是得从某个地方读过来。

那有没有一种生成id生成方案,既能让分库分表能做到很好的支持动态扩容,又能像雪花算法那样并不依赖redis这样的第三方服务。

有。这就是这篇文章的重点了。

适合分库分表的uuid算法

我们可以参考雪花算法的实现,设计成下面这样。注意下面的每一位,都是十进制,而不是二进制。

​开头的12位依然是时间,但并不是时间戳,雪花算法的时间戳精确到毫秒,我们用不上这么细,我们改为yyMMddHHmmss,注意开头的yy是两位,也就是这个方案能保证到2099年之前,id都不会重复,能用到重复,那也是真·百年企业。同样由于最前面是时间,随着时间流逝,也能保证id趋势递增。

接下来的10位,用十进制的方式表示工作机器的ip,就可以把12位的ip转为10位的数字,它可以保证全局唯一,只要服务起来了,也就知道自己的ip是多少了,不需要像雪花算法那样从别的地方去读取worker id了,又是一个小细节。

​在接下来的6位,就用于生成序列号,它能支持每秒钟生成100w个id。

最后的4位,也是这个id算法最妙的部分。它前2位代表分库id,后2位代表分表id。也就是支持一共100*100=1w张分表。

举个例子,假设我只用了1个分库,当我一开始只有3张分表的情况下,那我可以通过配置,要求生成的uuid最后面的2位,取值只能是[0,1,2],分别对应三个表。这样我生成出来的id,就能非常均匀的落到三个分表中,这还顺带解决了单个分表热点写入的问题。

如果随着业务不断发展,需要新加入两张新的表(3和4),同时第0张表有点满了,不希望再被写了,那就将配置改为[1,2,3,4],这样生成的id就不会再插入到对应的0表中。同时还可以加入生成id的概率和权重来调整哪个分表落更多数据。

有了这个新的uuid方案,我们既可以保证生成的数据趋势递增,同时也能非常方便扩展分表。非常nice。

数据库有那么多种,mysql只是其中一种,那其他数据库也是要求主键自增吗?

tidb的主键id不建议自增

tidb是一款分布式数据库,作为mysql分库分表场景下的替代产品,可以更好的对数据进行分片。

它通过引入Range的概念进行数据表分片,比如第一个分片表的id在02kw,第二个分片表的id在2kw4kw。这其实就是根据id范围进行数据库分表。

它的语法几乎跟mysql一致,用起来大部分时候是无感的。

但跟mysql有一点很不一样的就是,mysql建议id自增,但tidb却建议使用随机的uuid。原因是如果id自增的话,根据范围分片的规则,一段时间内生成的id几乎都会落到同一个分片上,比如下图,从3kw开始的自增uuid,几乎都落到range 1这个分片中,而其他表却几乎不会有写入,性能没有被利用起来。出现一表有难,多表围观的场面,这种情况又叫写热点问题。

​所以为了充分的利用多个分表的写入能力,tidb建议我们写入时使用随机id,这样数据就能被均匀分散到多个分片中。

用户id不建议用自增id

前面提到的不建议使用自增id的场景,都是技术原因导致的,而下面介绍的这个,单纯是因为业务。

举个例子吧。

如果你能知道一个产品每个月,新增的用户数有多少,这个对你来说会是有用的信息吗?

对程序员来说,可能这个信息价值不大。

但如果你是做投资的呢,或者是分析竞争对手呢?

那反过来。

如果你发现你的竞争对手,总能非常清晰的知道你的产品每个月新进的注册用户是多少人,你会不会心里毛毛的?

如果真出现了这问题,先不要想是不是有内鬼,先检查下你的用户表主键是不是自增的。

​如果用户id是自增的,那别人只要每个月都注册一个新用户,然后抓包得到这个用户的user_id,然后跟上个月的值减一下,就知道这个月新进多少用户了。

同样的场景有很多,有时候你去小店吃饭,发票上就写了你是今天的第几单,那大概就能估计今天店家做了多少单。你是店家,你心里也不舒服吧。

再比如说一些小app的商品订单id,如果也做成自增的,那就很容易可以知道这个月成了多少单。

类似的事情有很多,这些场景都建议使用趋势递增的uuid作为主键。

当然,主键保持自增,但是不暴露给前端,那也行,那前面的话,你当我没说过。

总结

  • 建表sql里主键边上的AUTO_INCREMENT,可以让主键自增,去掉它是可以的,但这就需要你在insert的时候自己设置主键的值。

  • 建表sql里的 PRIMARY KEY 是用来声明主键的,如果去掉,那也能建表成功,但mysql内部会给你偷偷建一个 ROW_ID的隐藏列作为主键。

  • 由于mysql使用B+树索引,叶子节点是从小到大排序的,如果使用自增id做主键,这样每次数据都加在B+树的最后,比起每次加在B+树中间的方式,加在最后可以有效减少页分裂的问题。

  • 在分库分表的场景下,我们可以通过redis等第三方组件来获得严格自增的主键id。如果不想依赖redis,可以参考雪花算法进行魔改,既能保证数据趋势递增,也能很好的满足分库分表的动态扩容。

  • 并不是所有数据库都建议使用自增id作为主键,比如tidb就推荐使用随机id,这样可以有效避免写热点的问题。而对于一些敏感数据,比如用户id,订单id等,如果使用自增id作为主键的话,外部通过抓包,很容易可以知道新进用户量,成单量这些信息,所以需要谨慎考虑是否继续使用自增主键。

Java中使用MyBatis获取数据库自增主键值的方法 本文还有配套的精品资源,点击获取 简介:主键自增是数据库设计的关键,自动生成唯一标识符。在使用MyBatis框架进行Java开发时,需要设置特定属性以获取由数据库(如MySQL、SQLite、PostgreSQL)自动生成的主键值。通过在MyBatis映射文件中设置 useGeneratedKeys="true" 和 keyProperty="prop... 阅读详情

相关推荐

Python 静态导入与动态导入

python中模块的静态导入 与 动态导入(运行时指定模块),以及具体对应示例。

慢也好,步子小也好,往前走就好~ 717

mysql中使用联合主键并设置非主键自增

mysql中使用联合主键并设置非主键自增 数据库里有三个三字段,id , wire_id, station_id。 其中wire_id+station_id合一起不允许重复(单独的某一个允许重复) 并且id需要实现自增 ### 尝试一:(未成功) 将wire_id和station_id设置为联合主键 想将id设置为自增 这里设置id自增的时候就会报错,因为只允许索引(包括主键)的才能设置为自增 所以需要先将id单独设置为唯一索引才行。 尝试二:(未成功) 将wire_id和stati

cxywangshun的博客 3433

第10章:位同步与Gardner环路(1)

第10章(1)内容如下:一、位同步与载波同步的区别1、采样时钟相位偏差的影响2、采样时钟频率偏差的影响二、Gardner环路算法与插值方法1、插值滤波器2、Gardner误差检查算法三、Gardner环路中环路滤波器与数字振荡器设计1、环路滤波器2、数控振荡器(NCO)四、Gardner环路的可运行MATLAB代码五、参考资料六、致谢 最近搞懂了Gardner环路的一些知识,于是更新第10章——位同步。 如果你稍不留意的话,这可能是你在网上能看到的介绍Gardner环路及其MATLAB仿真最详细的一篇文章了

weixin_44283855的博客 1万+

哪些情况下不可以用自增长字段做主键

http://zpfadmin.iteye.com/blog/671858 1:当开发分布式数据库系统 避免数据的不唯一性 应使用手动控制增长的字段做主键 2:当开发需要支持多数据库的系统有些数据库不支持自动增长  应使用手动控制增长的字段做主键 3:总的来说在非分布式,单SQL的系统里自增长还是好用的。

longlong821的专栏 1137

新手避坑指南:HT7036计量芯片SPI读取电压的完整流程(从复位到校准)

本文详细介绍了HT7036计量芯片的SPI读取电压完整流程,从硬件准备到校准设置,重点解析了复位引脚处理、SPI通信配置、芯片初始化及数据处理等关键步骤。针对常见问题如晶振焊接、SPI时序错误等提供实用解决方案,帮助开发者高效完成电压测量与校准。

weixin_30070339的博客 328

Android AMS——AMS初始化(二)

Android AMS 也是一个系统服务,属于系统服务中的引导服务,在 startBootstrapServices() 方法中启动。这里我们就来看一下 ActivityManagerService 的启动流程。

小旭的专栏 779

mysql主键自增_关于TiDB主键的几个坑

前言TiDB 是一款优秀的分布式数据库,定位于满足OLTP和OLAP的融合型数据库产品,实现了一键水平伸缩、强一致性的多副本数据安全、分布式事务、实时 OLAP 等重要特性。同时兼容 MySQL 协议和生态,迁移便捷,运维成本低。TiDB 现已被近 1000家不同行业的领先企业应用在实际生产环境,例如美团、小米、知乎、微众银行等,还包括一些海外客户(如日本的PayPay、东南亚的Sho...

weixin_39600885的博客 6435

高压控制单元与接触器 —— BMS电池的“高压大门”

高压接触器在BMS电池管理系统中扮演着“高压大门”的角色,负责控制电池包与整车高压母线的连接与隔离。接触器的工作原理基于线圈产生的磁力吸合接点,通过主触点接通高压电流路径,辅助触点检测状态,灭弧结构保护接点。预充电路的设计是为了避免直接连接大电容时产生的浪涌电流冲击,通过预充电阻逐步充电,确保系统安全上电。接触器控制策略包括顺序控制、辅助触点检测、温度监控、故障断电和背靠背MOS辅助控制,以确保系统的高效和安全运行。工程师在选择接触器型号、控制线圈、检测状态、软件冗余控制和预充失败保护等方面提供了具体建议。

weixin_43199439的博客 815

18个问题剖析MySQL索引

文章目录背景MySQL索引的18个问题1 索引是什么?2 索引的优缺点?3 MySQL的索引类型4 Mysql 索引底层数据结构选型(为什么索引结构默认使用B+Tree,而不是B-Tree,Hash,二叉树,红黑树?)哈希表二叉查找数(BST)红黑树平衡二叉树(AVL)B树(B-树)B+树5 Innodb 引擎和 Myisam 引擎对索引的实现6 InnoDB中一棵B+树能存多少行数据?7 聚簇索引和非聚簇索引8 非聚簇索引一定会回表查询吗?(覆盖索引)9 联合索引是什么?为什么需要注意联合索引中的顺序?1

Duktig的博客 738

Kappa函数:测量一致性并计算置信区间的R语言包

Kappa函数是一种常用的统计量,用于衡量两个评估者之间的一致性。在R语言中,有一个名为"vcd"的包提供了计算Kappa函数以及相应的置信区间的功能。本文将介绍如何使用"vcd"包来计算Kappa函数的值,并进一步计算置信区间。Kappa函数的值介于-1和1之间,值越接近1表示评估者之间的一致性越高,值越接近-1表示评估者之间的一致性越低,值接近0表示评估者之间的一致性接近于随机。通过以上步骤,我们成功地使用R语言中的"vcd"包计算了Kappa函数的值和置信区间。接下来,我们可以使用"vcd"包中的。

2301_79331230的博客 1877

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

我哎GIS博客 1666

数据库主键一定要自增吗?有哪些场景不建议自增?

建表sql里主键边上的,可以让主键自增,去掉它是可以的,但这就需要你在insert的时候自己设置主键的值。建表sql里的是用来声明主键的,如果去掉,那也能建表成功,但mysql内部会给你偷偷建一个ROW_ID的隐藏列作为主键。由于mysql使用B+树索引,叶子节点是从小到大排序的,如果使用自增id做主键,这样每次数据都加在B+树的最后,比起每次加在B+树中间的方式,加在最后可以有效减少页分裂的问题。在分库分表的场景下,我们可以通过redis等第三方组件来获得严格自增的主键id。魔改,,这样可以有效避免。..

m0_71777195的博客 1128

【硬件】LT3763中文手册

1)精确控制输入和输出电流;2) 3000:1真彩色PWM™调光;3) ±1.5%电压调节精度;4) ±6%电流调节精度;5)6V至60 V输入电压范围;6)宽输出范围最高可达55V;7)<2µA关断电流;8)用于负载电流热控制的控制引脚;9)输入和输出电流监控和限制;10)开路、短路和C/10故障检测;11)适用于LED应用的PWM驱动器输出;12)热增强型28引脚FE封装。

qq_39200110的博客 491

数据库主键一定要自增的吗?有哪些场景下不建议自增?

建表sql里主键边上的,可以让主键自增,去掉它是可以的,但这就需要你在insert的时候自己设置主键的值。建表sql里的是用来声明主键的,如果去掉,那也能建表成功,但mysql内部会给你偷偷建一个ROW_ID的隐藏列作为主键。由于mysql使用B+树索引,叶子节点是从小到大排序的,如果使用自增id做主键,这样每次数据都加在B+树的最后,比起每次加在B+树中间的方式,加在最后可以有效减少页分裂的问题。在分库分表的场景下,我们可以通过redis等第三方组件来获得严格自增的主键id。

m0_74931226的博客 707

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

关系型数据库主键的选择

主键唯一主键不可修改业务字段不可用于主键自增idUUIDUUID基于某个单表做自增主键基于多个单表+步长做自增主键雪花算法优点:缺点:

HelloWorld 1047

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MySQL 主键的重要度

更多内容关注微信公众号:fullstack888谈到MySQL数据库表设计和SQL优化,都会了解要有索引,可以说MySQL就是索引的代名词。这话一点都不夸张。MySQL数据库底层的inno...

qianshanding0708的博客 418

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MySql数据库——约束

数据表约束一、主键约束自增类型二、外键约束1、级联删除2、级联置空三、其他约束 一、主键约束     主键的作用是唯一标识一条记录。所以它不能重复,也不能为空,我们可以认为它是唯一性约束和非空约束的组合。一张数据表的主键最多只能有一个 (推荐每张表都设置一个主键)。主键可以是一个字段,也可以由多个字段符合组成。 -- 设置主键的两种方式 create table t_student ( id int primary key, name varchar(2

aqipa的博客 442

MySQL数据库建表、优化、算法、分区分库分表总结

建表 一、主键设置 主键为什么不推荐有业务含义? 1、因为任何有业务含义的列都有改变的可能性,主键一旦带上了业务含义,那么主键就有可能发生变更。主键一旦发生变更,该数据在磁盘上的存储位置就会发生变更,有可能会引发页分裂,产生空间碎片。 2、带有业务含义的主键,不一定是顺序自增的。那么就会导致数据的插入顺序,并不能保证后面插入数据的主键一定比前面的数据大。如果出现了,后面插入数据的主键...

Hello World 1089

MySQL自增主键详解

一、自增值保存在哪儿? 不同的引擎对于自增值的保存策略不同 1.MyISAM引擎的自增值保存在数据文件中 2.InnoDB引擎的自增值,在MySQL5.7及之前的版本,自增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找自增值的最大值max(id),然后将max(id)+步长作为这个表当前的自增值 select max(ai_col) from table_name for ...

hxt的博客 20万+

mysql 主键 自增_MySQL自增主键详解

一、自增值保存在哪儿?不同的引擎对于自增值的保存策略不同1.MyISAM引擎的自增值保存在数据文件中2.InnoDB引擎的自增值,在MySQL5.7及之前的版本,自增值保存在内存里,并没有持久化。每次重启后,第一次打开表的时候,都会去找自增值的最大值max(id),然后将max(id)+步长作为这个表当前的自增值select max(ai_col) from table_name for upda...

weixin_27960253的博客 1万+
上一篇: 两万字详细解读AQS,你真的了解它吗?
下一篇: 万字文带你搞懂Java线程池原理是什么
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值