在处理一个项目的bug的时候,发现问题是因为同一条sql数据查询出来的结果不一样.

后面搜索了下,发现原因是:mysql的select * from test查询结果跟表结构有关,有索引跟没索引结果会不一样.

测试示例:

表结构

CREATE TABLE `test` (
 `id` smallint(6) NOT NULL AUTO_INCREMENT,
 `type` tinyint(4) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf8

插入数据

INSERT INTO `test` (`id`, `type`) VALUES (NULL, '4'), (NULL, '2'),(NULL, '6'), (NULL, '1');

执行查询命令

select * from test

结果显示:

增加索引

alter table test add index type_ind (`type`);

再次执行查询命令

select * from test;

结果显示:

__结论:__Mysql在执行 select \* from table 的时候,如果没有索引,根据主键索引顺序显示,如果有索引则根据索引列的顺序.

如果要根据主键索引,可以强制执行主键索引

select * from test force index (primary)

)