MySQL自动使用一个唯一的列对表进行排序。这在哪里有记录?

MySQL自动使用一个唯一的列对表进行排序。这在哪里有记录?,mysql,sql,database,Mysql,Sql,Database,我正在运行MySQL 5.5,发现了以前不知道的行为 鉴于此,请创建: CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name_UQ` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 通过这些插入: insert into tes

我正在运行MySQL 5.5,发现了以前不知道的行为

鉴于此,请创建:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UQ` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
通过这些插入:

insert into test (name) values ('b');
insert into test (name) values ('a');
然后选择:

select * from test;
MySQL做了一些我不知道的事情:

2   a
1   b
它会自动排序

给定一个包含一个额外的非唯一列的表:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  `other_column` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UQ` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
对于相同的插入(见上文),选择(见上文)给出以下结果:

1   b   NULL
2   a   NULL
这是意料之中的事

第一个查询()的行为记录在哪里?我想看到更多这些奇特的东西。

MySQL不会自动对结果集排序。结果集的顺序是不确定的,除非查询指定了一个
orderby
子句

你不应该依赖于任何形式的“隐式”排序。仅仅因为您在1(或100个查询)中看到了它。事实上,如果没有order by,相同的查询可以在后续运行中以不同的顺序返回结果(尽管我承认这在其他数据库中经常发生,但在MySQL中不太可能)


相反,请按添加订单。按主键排序非常有效,因此您不必担心性能。

我不是说我依赖于此。我确实清楚地看到了具有一个唯一列的表与具有唯一列和另一个随机列的表在行为上的差异。我的问题是这种行为是否在任何地方都有定义。@Sherlock。它是被定义的。结果集的顺序是不确定的,除非您指定了一个由指定的
顺序。