插入新元素时如何向下推 ID

Posted

技术标签:

【中文标题】插入新元素时如何向下推 ID【英文标题】:How to push ID's down when INSERTing new element 【发布时间】:2020-04-16 05:15:24 【问题描述】:

假设我有一个带有此功能的 SQL 数据库

ID:1;用户名:管理员 编号:2;用户名:约翰 编号:3;用户名:比尔 编号:5;用户名:雷

我想在 John 之前插入一个 ID 为 2 的新元素 我怎样才能得到这个结果?

ID:1;用户名:管理员 ID:2;用户名:新用户 ID:3;用户名:约翰 ID:4;用户名:比尔 编号:5;用户名:雷

服务器根据 ID 将 John 和 Bill 向下推 如何使用 SQL 命令执行此操作?使用可重用函数来做,因为我的服务器会经常使用这个函数

【问题讨论】:

重复***.com/questions/6962867/… 这能回答你的问题吗? Insert into a row at specific position into SQL server table with PK 如果这是您想要做的,您应该重新考虑关系数据库是否真的适合您的项目。 :-( 更改现有 id 似乎是一个非常糟糕的主意。一般来说,称为“id”的东西应该被认为是不可变的。 kmoser 的答案是行不通的,因为这两个都是关于 Microsoft SQL Server 的,而且你已经标记了 mysql;这两个平台的 SQL 命令不兼容,这些命令会出现语法错误。 【参考方案1】:

正如 Strawberry 和 Gordon Linoff 所说,这是一个非常糟糕的主意。

您不应在数据库中重复使用 ID。您可能会破坏数据并违反数据库设计的一般原则之一。您甚至可能不想删除旧数据,而是将其标记为未使用或已禁用(或者完全删除可能适合您的用例,但请仔细考虑其他表的数据完整性)。

转换 ID 的问题更大,因为您必须在此过程中更新对旧 ID 的任何引用,否则您会弄乱您的数据。如果更新失败,则存在并发问题和数据损坏的风险。

请不要这样做。

但是,如果您坚持,有两个步骤。首先,转移ID。您必须先更新 Bill 的 ID,然后再更新 John。确保您也更新了任何其他表、查询、书签或对此 ID 号的打印引用。然后您可以将新用户插入旧 ID 2,这就像向 INSERT 函数显式提供实际 ID 一样简单(或者,既然您说您使用的是 phpMyAdmin,只需在“插入”字段中输入该数字而不是离开空白)。

但是说真的,不要这样做。

【讨论】:

此代码用于记事本。如果用户想将笔记移到第一个被看到的位置,我想将 ID 更改为 1,以便首先显示它。这就是为什么我想将另一个 ID 向下移动 我建议您为排序顺序设置另一列,然后您可以根据需要进行调整。这可能需要多个查询才能将其余项目级联到列表的下方。如果你需要一个 ID 列,它不应该改变;有一个单独的列用于排序顺序将保持您的数据完整性,并且仍然可以让您轻松更改排序。您将如何对排序顺序进行所有更改是一个设计决策,很大程度上取决于您的应用程序,并且主要是一个意见问题。

以上是关于插入新元素时如何向下推 ID的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 inline-block 元素被向下推?

如何在 MySQL 中将元素推送到 JSON

SwiftUI 中的插入/移除动画

将元素推送到数组时反应setstate不起作用

如何正确地将具有多个元素的新对象推送到数组中?

JS 之如何在插入元素时插在原有元素的前面而不是末尾