所以我有一个无序的表movement
,其中包含timestamp
,x
和y
列。我想按timestamp
排序,并更改并保存表,以便按时间戳排序所有行。
我想使用UPDATE TABLE
,但我不确定查询的外观......例如,我有这个:
UPDATE movement
SET ?????
ORDER BY timestamp;
我不想设置任何内容,我只想更改表格的顺序。我需要为我要编写的另一个查询执行此操作,但事实是这个表非常大,我需要分步拆分,以便以后的性能不会太糟糕。那我该怎么做呢?我找到this SO帖子解决了一个类似的问题,但我想知道是否有另一种方法来做而不是使用另一个表,因为正如我所说,这个表非常大(数百万行)并且重新复制这张桌子需要很长时间。
答案 0 :(得分:1)
表本身没有订单;您不必将它们更新为任何特定的顺序。
您要做的是从表格中选择您选择的顺序。然后它可以按您选择的任何顺序排列!
示例:
SELECT * FROM movement
ORDER BY timestamp;
但是在其他地方也许你想:
SELECT * FROM movement
ORDER BY timestamp DESCENDING;
答案 1 :(得分:1)
您无法在ORDER BY
声明中使用UPDATE
。 ORDER BY
只能与SELECT
语句一起使用。同样,不需要按特定顺序存储记录,因为您可以使用SELECT statement
来按特定顺序显示记录
select * from movement
order by timestamp
答案 2 :(得分:1)
关系数据库表表示无序集。没有用于对表进行排序的语法,因为没有像表中行的顺序那样的概念。当您发出没有明确order by
子句的查询时,数据库可能会以它认为合适的任何顺序将行返回给您,这可能会受到插入和写入磁盘的顺序的影响,它们存在于某些行中内存缓存,索引或许多其他实现细节。
如果要查询按时间戳排序的表的行,只需在order by
子句中明确说明:
SELECT *
FROM `movement`
ORDER BY `timestamp`
答案 3 :(得分:1)
实际上是可能的。这是MySQL格式...更新用于编辑已有的信息。如果要进行更直接的更改,请根据语法使用ALTER或MODIFY。
ALTER TABLE movement
ORDER BY timestamp;