示例,我有一个表,我想知道它是按字母顺序预先排列还是升序,是否有可以执行此操作的内置函数?
信件|数字|A | 1 |
B | 2 |
信件|数字|
B | 2 |
A | 1 |
感谢。
答案 0 :(得分:4)
表格中的数据未按任何顺序排列。
选择数据时必须明确指定订单。如果在选择数据时未指定订单,则返回的订单既不可预测也不可靠。
答案 1 :(得分:2)
其他答案是正确的,逻辑级别的SQL不保证行以任何顺序存储。
但在物理层面,数据当然存储在某些顺序中。 MyISAM和InnoDB中的大多数索引都是B树数据结构,根据定义,它们按升序存储值。在InnoDB中,表本身以主键顺序存储为聚簇索引。
因此,针对InnoDB表的以下两个查询返回的结果顺序相同:
SELECT * FROM innodb_table;
SELECT * FROM innodb_table ORDER BY primary_key;
但这是存储实现的巧合,而不是基于SQL语言中的任何内容。
如果针对非主键执行仅索引查询,则问题会更复杂。以下查询将按用作覆盖索引的索引按升序返回行:
SELECT indexed_column FROM innodb_table;
但是一旦你打破覆盖索引,它就会恢复为默认顺序的其他选择(可能再次聚集索引顺序):
SELECT indexed_column, non_indexed_column FROM innodb_table;
MyISAM完全不同,因为它不使用聚簇索引。因此默认顺序是存储顺序 - 不是必然是插入顺序。
答案 2 :(得分:1)
表格不按特定顺序存储数据。排序是为了查看数据,以便您使用order by
子句。
答案 3 :(得分:1)
在明确使用ORDER BY子句
之前,不应该依赖于如何检索数据答案 4 :(得分:1)
将我的声音添加到答案的音乐会......
在关系数据库(例如MySQL)中,表必须被视为无序行。
事实上,你甚至不应该依赖两个相同的SELECT
语句将以相同的顺序返回行的事实。
如果要根据特定顺序检索或排序行,则必须显式请求它(即:使用适当的ORDER BY
子句)和< / em>提供一个允许确定性地对行进行排序的列。