我正在尝试复制属于 object_id=123 的“子对象”,将 object_id 更改为 234。
INSERT INTO sub_objects(object_id, field1)
(SELECT 234, field1 FROM sub_objects WHERE object_id=123 ORDER BY id ASC)
它有效,但插入行的顺序(按 id 升序排列)与原始 - 不匹配SELECT 234, field1 FROM sub_objects WHERE object_id=123 ORDER BY id ASC
,尽管显式排序。
如何细化查询以便尊重插入行的顺序?
MySQL 中的行顺序概念(与任何其他 DBMS 一样) - 不存在。该表是一个堆。未分类。
说驱动器上有一些记录的物理排列是没有用的(特别是如果有聚集索引)。然而,这个物理位置不需要(尽管它可以)按照查询返回记录的顺序出现。
如果需要特定顺序,则需要在从表接收数据的查询中明确指定所需的排序顺序。只有在这种情况下才会出现顺序的概念 - 然后只针对那些排序表达式的值不同的记录。
如果多个记录具有相同的排序表达式值,则该组内记录的顺序也是未定义的(不存在)。并且两个连续的查询有权以不同的顺序返回该组的记录,只保留该组在整个记录集中的位置。
创建游标,并在游标遍历循环中插入记录。