首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >自动删除主键序列中的间隙

自动删除主键序列中的间隙
EN

Stack Overflow用户
提问于 2013-03-12 17:50:40
回答 2查看 752关注 0票数 4

我正在创建一个网页。此网页根据用户的操作将数据存储到MySQL数据库中。数据库有很多行。行的主键是列rowID,它只是按顺序对行进行编号(例如1,2,3,4....)。用户可以选择删除行。问题是,当用户删除最后一行以外的行时。rowID中有一个跳过。例如,如果有5行,1,2,3,4 ,5,用户删除了第三行。现在PHP列中的数据是1,2,4,5。我想知道在MySQL或rowID中是否已经有一个内置函数来有效地说明这一点。

我所知道的摆脱这种情况的唯一方法是循环遍历各行,并基本上刷新rowID。但是,如果有大量的行,我觉得这在时间上是非常昂贵的。

我还想知道如果创建了新的行,如何自动递增rowID。目前,我有代码来查找当前最大的rowNumber,并插入具有当前最大rowNumber+1的行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-12 17:52:41

你不会想这么做的。主键是唯一的标识符,一旦创建就永远不能更改。你要找的是nested sets。添加一个字段以跟踪left_id和right_id,并在必要时手动更新该字段。Doctrine2中有一些库可以为您处理此问题。

如果一定要进行此更改,可以使用alter table删除该字段,然后重新添加它。

票数 2
EN

Stack Overflow用户

发布于 2013-03-12 17:54:40

不,没有,因为它不重要。您不应该依赖于主键是一个连续的序列。它唯一的功能是确保键是该行的唯一标识符,除此之外,数字没有任何意义。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15368478

复制
相关文章
oracle 主键删除,联合主键的创建
ALTER TABLE TABLENAME DROP PRIMARY_KEY
全栈程序员站长
2022/07/13
3K0
【说站】sql如何设置主键、如何删除主键约束
如果字段已经建好,可以用以下命令来设置主键,当然前提是id为自增字段,一般设置为int数据类型,主键建议使用bigint类型,如果是其他数据类型的话设置为主键会报错。
很酷的站长
2022/11/24
3K0
【说站】sql如何设置主键、如何删除主键约束
MySql 主键自动增长
创建数据库,创建表。 Sql代码 mysql> create database ssh2;   Query OK, 1 row affected (0.04 sec)   mysql> use ssh2;   Database changed   mysql> create table user(       -> id integer primary key,       -> firstname varchar(200) not null,       -> lastname varchar(20
用户4988085
2021/07/20
5.4K0
oracle删除主键索引的sql语句_oracle主键索引和普通索引
相信不少人遇到过ORA-02429: cannot drop index used for enforcement of unique /primary key 这个错误,对应的中文提示“ORA-02429: 无法删除用于强制唯一/主键的索引”,其实从错误提示信息已经很明显了。下面还是用一个简单的例子述说一下该错误的来龙去脉。
全栈程序员站长
2022/10/03
3.9K0
Oracle增加修改删除字段/主键
总结: 1、当字段没有数据或者要修改的新类型和原类型兼容时,可以直接modify修改。 2、当字段有数据并用要修改的新类型和原类型不兼容时,要间接新建字段来转移。
小小工匠
2021/08/16
2.1K0
Mybatis 中的主键返回
使用useGeneratedKeys设置为true后 , MyBatis会使用JDBC的getGeneratedKeys方法取出由数据库内部生成的主键 . 获得主键值之后将其赋给keyProperty配置的 id 属性 . 当需要设置多个属性时 , 使用逗号隔开 , 这种情况下 还需要配置 keyColumn属性 , 按顺序指定数据库的列 , 这里列的值会和 keyProperty 配置的属性一一对应 . 由于要使用数据库返回的主键值 , 所以SQL上下两部分的列中去掉了 id 列和对于的 #{id} 属性
MashiroT
2022/10/28
8280
删除Xcode中类似VVdocumenter(自动注释)的插件
Xcode管理插件有统一的位置,经过运行安装的插件是保存在一个文件夹中的。打开文件夹就可以删除指定的插件了 步骤:选择Finder —>选择“前往”(同时按下option键)—> 选择资源库 屏幕
梧雨北辰
2018/04/24
1.6K0
删除Xcode中类似VVdocumenter(自动注释)的插件
MySQL中主键为0和主键自排约束的关系
Insert 进去 id = 0的数据,数据会从实际的行数开始增加,和从0变化不一样;
星哥玩云
2022/08/16
4.3K0
MySQL中主键为0和主键自排约束的关系
mysql间隙锁
然而索引类型的不同也会影响间隙锁锁住数据的范围,唯一索引会锁住上面的范围,但是常规索引则会针对上下返回都会锁住;
johnhuster的分享
2022/03/28
5390
mysql间隙锁
Mysql的间隙锁
学习Mysql, 总会有一座绕不过去的大山, 那就是锁。理论上,锁的花样再多,也超不出操作系统课上讲的那些范畴,但是Mysql锁让我翻车了。
重归混沌
2021/04/28
8440
MySQL的间隙锁
间隙锁(Gap Lock)是Innodb在可重复读提交下为了解决幻读问题时引入的锁机制。当用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这些“间隙”进行加锁,这种锁机制就是所谓的间隙锁(NEXT-KEY)锁。
BUG弄潮儿
2020/06/15
8410
mycat全局序列号(主键)及分片配置
2.插入数据 insert 本用的表名 BALANCE_REPORT name:要使用全局主键的表名 current_value:是初始值 increment:是每次增长多少
全栈程序员站长
2021/05/19
5210
序列作为主键使用的原理、优缺点讨论
这几天和同事一直在讨论关于表设计中主键选择的问题,用sequence作为主键究竟有什么好处,又有什么缺点,尤其是有些事务场景上下文需要用到创建的序列值,如何用?其实我想说的是,可能只是一个很简单的概念,可能深入理解,还是有很多未知的知识,当然也就可能会有一些容易忽略但又可能很关键的坑,只有碰了才知道。。。
bisal
2019/01/29
1.1K0
.NET生成MongoDB中的主键ObjectId
  因为很多场景下我们需要在创建MongoDB数据的时候提前生成好主键为了返回或者通过主键查询创建的业务,像EF中我们可以生成Guid来,本来想着要不要实现一套MongoDB中ObjectId的,结果发现网上各种各样的实现都有,不过好在阅读C#MongoDB驱动mongo-csharp-driver代码的时候发现有ObjectId.GenerateNewId()的方法提供,我们可以直接调用即可,不需要我们在花费多余的时间设计重写了。
追逐时光者
2023/03/24
1.4K0
.NET生成MongoDB中的主键ObjectId
Authors数组或集合返回自动生成的主键
如果你的数据库还支持多行插入, 你也可以传入一个Authors数组或集合,并返回自动生成的主键。
用户8983410
2021/10/07
1K0
Python|删除回文子序列
给你一个字符串 s,它仅由字母 'a' 和 'b' 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。
算法与编程之美
2020/06/24
9530
(细节)My SQL中主键为0和主键自排约束的关系
开始不设置主键 表的设计如下: 如果id的位置有好几个0的话:设置主键并且自动排序时,0会从1开始递增; Insert 进去 id = 0的数据,数据会从实际的行数开始增加,和从0变化不一样; 现在主
汪凡
2018/05/29
1.2K0
(解释文)My SQL中主键为0和主键自排约束的关系
  上一篇我们说了关于自排如果主键是0的问题,在这里我搞清楚了原因,导致这种情况是因为在SQL中对自排设置了初始值:   从这里可以看到这两个变量一个是自增的初始值,一个是增量,这里都是1,所以在设置
汪凡
2018/05/29
1.3K2
MyCat教程【全局序列号-全局主键自增长】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
用户4919348
2019/10/17
1.6K0
mysql设置主键自增,删除部分数据,将主键顺序重新排序解决方案
原因:在进行数据的插入删除的时候,总会有以前创建的数据被删除的情况,但是删除后再添加,还是从当前id最大的值进行自增的,所以是这样下去可能时间长了就会超出范围
知识浅谈
2021/05/10
4.6K0

相似问题

如何在主键列中重用Oracle序列间隙?

22

SQL查询:查找主键中的间隙

20

自动递增ids /主键中的“间隙”会导致任何问题吗?

12

使用序列自动设置Oracle主键

23

从自动增量主键中获取已删除主键列表

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文