【问题标题】:SQL - UPDATE TABLE and ORDER BY?SQL - 更新表和排序?
【发布时间】:2015-08-18 03:23:12
【问题描述】:

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

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

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

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

【问题讨论】:

  • 虽然以这种方式“排序”表没有多大意义,但您可以创建一个虚拟表以按排序顺序存储值。然后删除原始表的内容并将所有内容复制回来,添加一个名为 sortorder 的附加列,您在更新期间使用 rownum 填充该列。但问题是,你为什么要这样做?
  • 是否有任何理由使用 UPDATE 表名,您可以创建一个新的有序表,并替换旧表吗?
  • 您还可以创建一个view,其中包含按时间戳排序的 SQL 查询。然后您可以像引用表格一样引用此视图。
  • @avk 谢谢,我可能最终会这样做。我想这样做是因为我有另一个要在表上实现的查询,因为它会检查所有timestamp >= 'example timestamp',所以使用有序表会更快。还是这个逻辑不正确?
  • 是和不是。视图只不过是一种基于业务逻辑模拟表的简单方法。所以它会查询这个视图而不是把它当作一个表。您可以查看的是名为 materialized views 的东西,它实际上创建了虚拟表。不幸的是,这有它自己的缺点,比如刷新间隔。

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


【解决方案1】:

其实是可以的。这是 MySQL 格式...更新用于编辑现有信息。如果要进行更直接的更改,请根据语法使用 ALTER 或 MODIFY。

ALTER TABLE movement 
ORDER BY timestamp;

【讨论】:

    【解决方案2】:

    关系数据库表表示无序集。没有用于对表进行排序的语法,仅仅是因为没有表中行的顺序这样的概念。当您在没有显式 order by 子句的情况下发出查询时,数据库可能会以它认为合适的任何顺序将行返回给您,这可能会受到它们插入和写入磁盘的顺序、它们在某些内存缓存中的存在的影响、索引或许多其他实现细节。

    如果要查询按时间戳排序的表行,只需在order by 子句中明确声明即可:

    SELECT   *
    FROM     `movement`
    ORDER BY `timestamp`
    

    【讨论】:

      【解决方案3】:

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

      您所做的是从表中选择您选择的内容的顺序。然后它可以按照您选择的任何顺序!

      例子:

      SELECT * FROM movement  
      ORDER BY timestamp; 
      

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

      SELECT * FROM movement  
      ORDER BY timestamp DESCENDING; 
      

      【讨论】:

        【解决方案4】:

        您不能在UPDATE 语句中使用ORDER BYORDER BY 只能与 SELECT 语句一起使用。同样,不需要按特定顺序存储记录,因为您可以使用 SELECT statement 之类的方式按特定顺序显示记录

        select * from movement 
        order by timestamp
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-01
          • 1970-01-01
          • 2013-04-24
          • 1970-01-01
          • 1970-01-01
          • 2010-10-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多