MySQL5について質問です。

テーブルにデータをinsertしていきます。
insertが終った後、このテーブルのデータをselectします。このとき、order byを指定しなければinsertした順番にデータを取得できるように思います。ただ、現状がたまたまinsert順にselectできているのかが分からないです。
MySQLの公式サイトの仕様にこのような情報があればURLを教えていただけますか。
知りたいことは、insertした順番でselectでデータが取得できるというのはMySQLの公式な仕様としてあるのか。という点です。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2010/03/08 14:18:40
  • 終了:2010/03/08 15:51:58

回答(2件)

id:HALSPECIAL No.1

HALSPECIAL回答回数407ベストアンサー獲得回数862010/03/08 14:42:41

ポイント31pt

こちらでいかがでしょうか。


バージョン 5.0.3-alpha の MySQL について記述

1.8.6.2. MySQL の未解決のバグと設計上の問題

http://mysql.uahrc.se.ntou.edu.tw/doc/mysql/ja/open-bugs.html

実際、たとえば、ORDER BY がない INSERT ... SELECT の場合、SELECT は、マスタおよびスレーブでオプティマイザによって行われる選択によっては、異なる順序でレコードを返すことがある

id:salvatore

ありがとうございます。

2010/03/08 15:51:35
id:JULY No.2

JULY回答回数966ベストアンサー獲得回数2472010/03/08 14:52:27

ポイント39pt

一般論として、

* ORDER BY を指定しない時の順序は不定

であり、ORDER BY を指定せずに得られた結果の順序に依存してはならない、というのが鉄則ではあります。

で、あえて証拠を探そうとすると、なかなか見つからないのですが、mysql のフォーラムで下記のページが見つかりました。

MySQL :: Re: What is The Default Sort Order of SELECTS with no ORDER BY Clause?

Order by 句が無い時のデフォルトのソート順序は、という問に対する回答ですが、一番最初に、

* Do not depend on order when ORDER BY is missing.

と書かれているのは、私の冒頭に書いたこととと同じです。

で、後半にちょっと興味深いことが書かれています。

SELECT * FROM tbl -- this will do a "table scan". If the table has never had any DELETEs/REPLACEs/UPDATEs, the records will happen to be in the insertion order, hence what you observed.

If you had done the same statement with an InnoDB table, they would have been delivered in PRIMARY KEY order, not INSERT order. Again, this is an artifact of the underlying implementation, not something to depend on.

前半では、salvatore さんが言われているように、DELETE / REPLACE/ UPDATE が一度も実行されてなければ、INSERT した順序で現れるだろう、という話が書かれています。

しかし後半では、InnoDB のテーブルに対して同じことをすれば、INSERT の順序ではなく、プライマリーキーの順序にになる、と書かれています。

MySQL の場合、バックエンドになるデータベースの形式を選択できるので、もし、仮に「INSERT の順序」という話があっても、それは「バックエンドに何を選択したか」に依存してしまいます。

ですので、「MySQL」として公式に「INSERT 順序」という事は言えないでしょう。強いて言えば、「MyISAM の場合は」とか「InnoDB の場合は」といった事になるでしょう。

id:salvatore

ありがとうございます。参考にさせていただきます。

2010/03/08 15:51:47

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません