如何在现有表的中间插入新的数据库记录?
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 继续源获取数据?