首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL的默认顺序取决于何处

问MySQL的默认顺序取决于何处
EN

Stack Overflow用户
提问于 2011-12-13 11:40:27
回答 3查看 4.8K关注 0票数 6

可能重复: MySQL中的默认排序(ALTER…)…定单;)

我有一张这样的桌子:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `table_test` (
  `id` mediumint(8) unsigned NOT NULL,
  `country` enum('AF','AX','AL') DEFAULT NULL,
  `number` tinyint(3) unsigned DEFAULT NULL,
  `sort_order` double unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `country` (`country`),
  KEY `id` (`id`,`country`)
) ENGINE=MEMORY DEFAULT CHARSET=latin1;

我有一个表,为此我更改了默认排序,如下所示:

代码语言:javascript
复制
ALTER TABLE test_table ORDER BY sort_order ASC;

此表从未更新过,并且在其使用期间没有删除或添加任何记录。这一切似乎都是可行的,所以如果我使用折叠查询:

代码语言:javascript
复制
SELECT * FROM test_table LIMIT 10

它以正确的顺序返回10条记录。

即使我用:

代码语言:javascript
复制
SELECT * FROM test_table WHERE num=3

它以正确的顺序返回结果。

但如果我做了

代码语言:javascript
复制
SELECT * FROM test_table WHERE country='AX'

它将以相反的顺序返回结果。

谁能告诉我怎么会发生这种事吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-13 11:53:37

在表上指定order只是帮助引擎加快具有相同顺序的查询。它不会强迫mysql始终以相同的顺序返回结果。

在这里描述:http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

"ORDER使您能够以特定的顺序创建带有行的新表。请注意,在插入和删除之后,该表不会保持此顺序。此选项主要是当您知道大部分时间都要按特定顺序查询行时使用此选项。在对表进行重大更改后使用此选项,您可能能够获得更高的性能。在某些情况下,如果表按您希望在以后对其进行排序的列排序,则可能更容易对该表进行排序。“

因此,您也必须在查询中使用ORDER表达式。

票数 5
EN

Stack Overflow用户

发布于 2011-12-13 11:48:18

我想您的国家索引的默认顺序是DESC。正因为如此,如果使用这个命令,您就会得到“错误”的顺序,而且在所有其他情况下都是不同的。不确定是否可以或如何在mysql中指定索引的顺序,但我认为是这样。

但我仍然不确定,如果您没有指定订单,您是否可以依赖订单。只需将ORDER语句添加到所有查询中即可。

票数 3
EN

Stack Overflow用户

发布于 2011-12-13 11:46:00

为什么不尝试这样的查询:

代码语言:javascript
复制
SELECT * FROM test_table  ORDER BY sort_order ASC LIMIT 10;
SELECT * FROM test_table  WHERE num=3 ORDER BY sort_order ASC;
SELECT * FROM test_table WHERE country='AX' ORDER BY sort_order ASC;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8488588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档