2017-01-13 4 views
0

私はMySQL 5.5を実行しており、これまでには分かっていない動作が見つかりました。考えるMySQLはテーブルを1つのユニークなカラムで自動的にソートします。これはどこに文書化されていますか?

この作成:

insert into test (name) values ('b'); 
insert into test (name) values ('a'); 

そして、この選択:これらのインサート付き

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; 

select * from test; 

MySQLは、私は知らなかった何かをします

2 a 
1 b 

自動的にソートされます。 1つの余分、非ユニーク列を持つ表を考えると

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 

どの予想どおりです。

最初のクエリ(SQL Fiddle)の動作は文書化されていますか?私はこれらの独特のものの多くを見たいと思います。

答えて

1

MySQLはではありません。自動的に結果セットをソートします。クエリが句を指定しない限り、結果セットの順序は不確定です。

"暗黙の"並べ替えには決して依存しないでください。あなたが1(または100のクエリ)でそれを見るからです。実際には、order byがなければ、同じクエリは後続の実行で異なるオーダーの結果を返すことができます(ただし、これは他のデータベースで定期的に発生することは認められますが、MySQLではそうではありません)。

代わりに、ORDER BYを追加してください。主キーによる注文は非常に効率的です。したがって、パフォーマンスについて心配する必要はありません。

+0

私はこれに頼っているわけではありません。 1つのユニークな列を持つテーブルとユニークな列と別のランダムな列を持つテーブルの動作の違いがはっきり分かります。私の質問は、この動作がどこに定義されているかどうかです。 – Sherlock

+1

@Sherlock。 。 。それは*定義されています。 'order by 'を指定しない限り、結果セットは不確定な順序になります。 –

関連する問題