如何在现有表的中间插入新的数据库记录?

Posted

技术标签:

【中文标题】如何在现有表的中间插入新的数据库记录?【英文标题】:How can I insert a new database record in the middle of an existing table? 【发布时间】:2015-12-14 07:57:33 【问题描述】:

我想在我的表中插入一个新突出显示的行,但之前已经存在一些数据。我该怎么办?

请在下面找到图片;

我想在 Rails 中使用 SQL 语句。

【问题讨论】:

对输出进行排序:SELECT * FROM your_table ORDER BY Date 你不能决定插入行的位置,但是你可以决定 SELECT 时返回的顺序。按日期订购。 SQL 表没有任何固有顺序。没有插入特定位置这样的事情。 你无法控制插入记录的位置,但是你可以对SELECT的结果进行排序,也可以考虑在int数据类型中添加一列display_order,在插入时设置值,然后排序结果order by display_order ASC/DESC 感谢您的回复。但我正在使用 Rails 应用程序以及如何更改我的迁移文件以获得所需的结果。等待您的回复.... 【参考方案1】:

SQL 中的表没有定义的顺序(它们可能有,取决于具体的实现,但你不能指望它)。

如果你需要一定的排序,你必须在选择时对你的结果集进行排序。

因此,我可以看到两种可能性:

    更新“缺失”行上方的每个 id,并使用新“释放”的 id 插入新行。这可能会破坏很多其他内容(对您的 ID 的引用也需要更新)。 引入一个定义排序的新列。这样,排序可以独立于行的 ID。

【讨论】:

感谢您的回复。我采用了第一种方法并使其正常工作。【参考方案2】:

我使用了以下方法;

User.find(previous id value).update_column(:id, new id value)

例如,第一行的id值为1,第三行的id值为2,将id值为3的高亮行放在中间。 首先我们将 id 值 = 2 更改为 4,然后将 id 值 = 3 更改为 2 因此结果。希望一切都清楚。

【讨论】:

以上是关于如何在现有表的中间插入新的数据库记录?的主要内容,如果未能解决你的问题,请参考以下文章

当新记录插入或更新数据库表中的现有记录时,如何 Hazelcast jet JDBC 继续源获取数据?

如何使用bigquery流将嵌套数据插入现有记录

在插入之前检查现有记录

CodeIgniter - 如果新的或更新的重复记录则插入活动记录

创建将数据插入两个现有表的 SQL FUNCTION

如何在mysql 5中记录特定表的插入/更新查询