SQL - UPDATE TABLE和ORDER BY?

时间:2015-06-03 18:45:26

标签: mysql sql phpmyadmin sql-update sql-order-by

所以我有一个无序的表movement,其中包含timestampxy列。我想按timestamp排序,并更改并保存表,以便按时间戳排序所有行。

我想使用UPDATE TABLE,但我不确定查询的外观......例如,我有这个:

UPDATE movement 
SET ????? 
ORDER BY timestamp; 

我不想设置任何内容,我只想更改表格的顺序。我需要为我要编写的另一个查询执行此操作,但事实是这个表非常大,我需要分步拆分,以便以后的性能不会太糟糕。那我该怎么做呢?我找到this SO帖子解决了一个类似的问题,但我想知道是否有另一种方法来做而不是使用另一个表,因为正如我所说,这个表非常大(数百万行)并且重新复制这张桌子需要很长时间。

4 个答案:

答案 0 :(得分:1)

表本身没有订单;您不必将它们更新为任何特定的顺序。

您要做的是从表格中选择您选择的顺序。然后它可以按您选择的任何顺序排列!

示例:

SELECT * FROM movement  
ORDER BY timestamp; 

但是在其他地方也许你想:

SELECT * FROM movement  
ORDER BY timestamp DESCENDING; 

答案 1 :(得分:1)

您无法在ORDER BY声明中使用UPDATEORDER 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;