3

この質問は、私の古い質問、Getting last record from mysqlに少し関連しています。

これらの回答から、SELECT が特定の順序で行を返すことが保証されていないことがわかりました (もちろん ORDER BY 句を使用しません)。

@YaK の回答に従い、AUTO_INCREMENT以下のコマンドを使用して表に追加しました。

ALTER TABLE maxID ADD sequence INT DEFAULT NULL;
ALTER TABLE maxID ADD INDEX(sequence);
ALTER TABLE maxID MODIFY sequence INT AUTO_INCREMENT;

しかし、今日、私は1つの質問を受けました。

SELECT特定の順序で行を返すことが保証されていない場合 (もちろん句を使用せずにORDER BY)、テーブルの変更中に THENAUTO_INCREMENTが適切に実装されるでしょうか?

4

1 に答える 1

1

バックグラウンドで何が起こっているかは、エンジンの種類によって異なります。

'MyISAM および BDB テーブルの場合、複数列インデックスのセカンダリ列に AUTO_INCREMENT を指定できます。この場合、AUTO_INCREMENT 列の生成値は、MAX(auto_increment_column) + 1 WHERE prefix=given-prefix として計算されます。これは、データを順序付けられたグループに入れたい場合に便利です。

これにより、auto_increment に複数の値を持つテーブルが作成され、一意ではない値になります。

したがって、実際に意味するのは、InnoDB テーブルに対して auto_increment (必須ではありませんが) を持つ PRIMARY KEY を持つことです。単純な選択では、order by 句なしで選択すると、主キーの順序で値が返されます。これは、値がこの順序で格納され、並べ替えに主キーを使用するためです。

特定の順序を常に指定する場合は、必要に応じて PRIMARY KEY を使用しますが、常に指定します。

于 2012-11-12T16:39:50.247 に答える