人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: salvatore
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:MySQL SELECT URL たまたま データ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● HALSPECIAL
●31ポイント

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


バージョン 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 は、マスタおよびスレーブでオプティマイザによって行われる選択によっては、異なる順序でレコードを返すことがある

◎質問者からの返答

ありがとうございます。


2 ● JULY
●39ポイント

一般論として、

* 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 の場合は」といった事になるでしょう。

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ