当前位置: 首页 > 面试题库 >

MySQL中的默认排序(ALTER TABLE…ORDER BY…;)

贝镜
2023-03-14
问题内容

假定通过执行以下操作来更改MySQL表(ISAM)的默认顺序:

ALTER TABLE tablename ORDER BY columnname ASC;

从现在开始,假设我的查询中未指定“ ORDER BY”(即“ SELECT * FROM tablename WHERE … LIMIT
10;”),我是否可以 保证 按“ columnname ASC”的顺序从表中检索到记录?

我应该注意什么极端情况吗?

更新#1:非常 感谢Quassnoi,他正确地指出INSERT和DELETE弄乱了顺序。这使我想到以下额外的问题:

  • 那么更新呢?假设没有对表进行INSERT或DELETE操作,而仅对更新进行了操作-排序顺序是否完整?
  • 假设已完成INSERT和DELETE-如何再次“重建”排序,每天说一次(在这种特定情况下,该表每天仅更改一次,因此在进行更改后每天重新生成它应该仍然可以!)。REPAIR TABLE是否可以修复它,还是必须再次添加ALTER TABLE … ORDER BY?

问题答案:

文档

请注意,插入和删除后,表不会按此顺序保留

实际上,如果您SELECT ... ORDER BY向该表发出命令,则该选项ALTER TABLE不会浪费您的时间filesort,反而会使filesort速度更快。

对已排序的集合进行排序等同于浏览该集合以确保一切正常。

那么更新呢?假设没有对表进行INSERT或DELETE操作,而仅对更新进行了操作-排序顺序是否完整?

如果您的表不包含任何动态字段(如VARCHAR“ BLOB”或“ BLOB”),则更新时 很可能 MyISAM不会移动它。

但是,如果我正在建造核电站或获得报酬的东西,我将不会依靠这种行为。

假设已完成INSERT和DELETE-
如何再次“重建”排序,每天说一次(在这种特定情况下,该表每天仅更改一次,因此在进行更改后每天重新生成它应该仍然可以!)。REPAIR
TABLE是否可以修复它,还是必须再次添加ALTER TABLE … ORDER BY?

您需要做ALTER TABLE ... ORDER BY

REPAIR 只是修复损坏表的物理结构。



 类似资料:
  • 问题内容: 当其他选项(例如或)看起来更合理时,将其设置为已编译默认值的原因是什么? 问题答案: 写这封信的那个家伙是一家瑞典公司的联席主管。 出于类似的原因,可能是Microsoft SQL Server的默认语言us_english。

  • 我有一个简单的JavaFX应用程序,它有一个表视图。表格视图显示了一些按特定顺序排序的数据。有没有办法显示箭头(默认情况下)指示数据已按该顺序排序? 我的代码如下:

  • 问题内容: 更新时间 : 输出: 当我们添加时,需要一些信息来设置默认排序整数值,但是如果我将字符串添加到设置,则默认情况下不会排序。 更新: 并且Caps字母将在运行多次后始终进行排序。 java版本“ 1.6.0_26” Java™SE运行时环境(内部版本1.6.0_26-b03)Java HotSpot™客户端VM(内部版本20.1-b02,混合模式,共享) 请给我一些想法。谢谢 问题答案:

  • 主要内容:在创建表时设置默认值约束,在修改表时添加默认值约束,删除默认值约束默认值(Default)的完整称呼是“默认值约束(Default Constraint)”,用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。 例如,员工信息表中,部门位置在北京的较多,那么部门位置就可以默认为“北京”,系统就会自动为这个字段赋值为“北京”。 默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。 在

  • 问题内容: 我希望一列默认为GUID,因此,如果我正在执行插入操作且未明确设置该值,则希望将其默认为新的GUID值。 我怎样才能做到这一点? 问题答案: 由于UUID()不被接受为DEFAULT约束,因此您需要使用触发器。 这将设置列的值:

  • 问题内容: 因此,我在过去的一个小时里一直在互联网上浏览,阅读并寻找这个简单问题的明确答案。 MySQL中的默认JOIN是什么? 一样吗 还有一个相关的问题,当您使用“ WHERE”子句时,它与JOIN或INNER JOIN相同吗? 现在,我认为独立的JOIN与使用逗号和WHERE子句相同。 问题答案: 在MySQL中,写不合格的隐含含义。换句话说,in 是可选的。而在MySQL的同义词。为了清楚