Go to the first, previous, next, last section, table of contents.


1 MySQL についての一般情報

これは MySQL のリファレンスマニュアルです; これは MySQL バージョン 3.22.21 について記述しています。

MySQL はとても高速で、マルチスレッド、マルチユーザ、頑丈な SQL (Structured Query Language)データベースサーバです。

Unix と OS/2 プラットフォームでは MySQL は基本的に無償であり、Microsoft プラットフォームでは、30日の試用期間を過ぎて使用する場合に MySQL ライセンスを 買わなければなりません. 「3 MySQL ライセンスとサポート」節参照.

MySQL ホームページMySQL についての最新情報を提供しています。

MySQL の能力の説明については、 「1.4 MySQLの主な機能」節 を参照してください。

インストール方法については 「4 MySQL のインストール」節 を参照してください。 MySQL を新しいマシンや OS に移行するためのヒントについては 「G 他のシステムへの移植について」節 を参照してください。

3.21 リリースからのアップグレードについての情報は、 「4.16.2 3.21 から 3.22 バージョンへのアップグレード」節 を参照してください。

MySQL 導入のチュートリアルについては、 「8 MySQL チュートリアル」節 を参照してください。

SQL の例とベンチマーク情報についてはベンチマーキングのディレクトリを参照 してください。(`sql-bench' ディレクトリです)

新しい機能とバグ修正の履歴については 「D MySQL change history」節 を参照してください。

現在知られているバグと無い機能の一覧については 「E MySQL での既知のエラーと欠けているデザイン」節 を参照してくだ さい。

将来の計画については 「F MySQL に将来加えたいもの (The TODO)」節 を参照してください。

このプロジェクトへの全ての貢献者のリストについては 「C Contributors to MySQL」節 を参照してくだ さい。

重要:

バグ(エラー)レポート、質問、コメントはメーリングリスト mysql@lists.mysql.com に送ってください。 「2.3 バグや問題を報告する方法」節参照。

ソースディストリビューションでは、mysqlbug スクリプトは `scripts' ディレクトリ に見つけることができます。バイナリディストリビューションでは、mysqlbug`bin' ディレクトリに見つけることができます。

このマニュアルへの追加または修正に関連する提案がある場合は、それらを MySQL マニュアルチーム (docs@mysql.com)に 送ってください。

1.1 MySQL とは何か?

MySQL は本当にマルチユーザ、マルチスレッドの SQL データベースサーバです。SQL は世界でもっともポピュラーな データベース言語です。MySQL は、サーバデーモン mysqld と 多くの種類のクライアントプログラムとライブラリからなるクライアント/サー バ実装です。

SQLは、情報を保存し、更新し、そしてアクセスすることを簡単にするために標準化された言語です。 例えば、あなたは、商品案内を検索するためにSQLを使って、 ウェブサイトに関するカスタマー情報を蓄積することができます。 MySQL は、ログや写真を保存させるにも、十分にはやく、フレキシブルです。

MySQL の主な目的は高速で頑丈で簡単に使用できることです。 MySQL は独自に開発されました。我々は、とても大きなデータ ベースを、他のデータベースベンダが我々に提供するものよりも速く、重要度の 順に処理できる SQL サーバを必要としていたからです。我々は、10,000 テー ブルを含む 40 以上のデータベースの環境で 1996 年から MySQL を使 用しています。そのテーブルの 500 以上は 700万以上のレコードを持ちます。 これは約100ギガバイトの、基幹業務のデータです。

MySQL が作成される上での基本は、何年もの間、製品環境の高い要求 で使用されていたルーチンのセットです。MySQL はまだ開発中ですが、 豊富でとても有用な関数セットを既に提供しています。

MySQL の公式な発音は ``My Ess Que Ell'' です(MY-SEQUEL ではあり ません)。

1.2 このマニュアルについて

このマニュアルは以下の方々により訳されました (ハンドル名だけ書きます。敬称略。翻訳サーバーに登録した順 :) ):

このマニュアルは現在 Texinfo, プレーンテキスト, Info, HTML, PostScript, PDF バージョン があります。サイズが大きいため Postscript と PDF バージョンは MySQL のディストリビューションには含まれていませんが、別にダウン ロードするようになっています。http://www.mysql.com.

プライマリドキュメントは Texinfo ファイルです。HTML バージョンは texi2html の変更されたバージョンで自動的に提供されます。プレーン テキストと Info バージョンは makeinfo で提供されます。PostScript バージョンは texi2dvidivps を使用して提供されます。PDF バージョンは Ghostscript ユーティリティ ps2pdf で提供されます。

このマニュアルは David Axmark, Michael (Monty) Widenius, Paul DuBois, Kim Aldale によって作成され、維持されています。他の貢献者については 「C Contributors to MySQL」節 を参照してください。

1.2.1 このマニュアル中で使用されている表記

このマニュアルは特定の印刷上の表記を使用しています:

constant
固定幅フォントは次のものに使用されます。コマンド名, オプション; SQL ステー トメント; データベース名, テーブル名, フィールド名; C と Perl コード; 環境変数。 例: ``mysqladmin がどのように動作するかを見るためには、 --help オプションをつけて起動してください。''
`filename'
引用符で括られた固定幅フォントはファイル名とパス名に使用されます。例: `` ディストリビューションは `/usr/local' ディレクトリ配下にインストールされます。''
`c'
引用符で括られた固定幅フォントは文字シーケンスを示すためにも使用されます。 例: ``ワイルドカードを指定するためには、`%' 文字を使用してください。''
italic
イタリックフォントは強調のために使用されます, このように
boldface
ボールドフォントはアクセス権名(例えば、``process 権を容易に 与えないでください'')と、特に強い強調を伝えるために使用されます。

コマンドが特定のプログラムによって実行されることを意味することを表す時、 コマンドと共に表示されるプロンプトによって、そのプログラムを表します。例えば、 shell> は、あなたのログインシェルから実行するコマンドを表し、 mysql>mysql クライアントから実行するコマンドを表します:

shell> type a shell command here
mysql> type a mysql command here

シェルコマンドは Bourne シェル構文で示されます。csh 形式のシェ ルを使用している場合は、わずかに変更してコマンドを発行する必要があるでしょ う。例えば、環境変数を設定してコマンドを実行するシーケンスは、Bourne シェ ル構文では次のようになります:

shell> VARNAME=value some_command

csh では、次のようなシーケンスを実行してください:

shell> setenv VARNAME value
shell> some_command

データベース名, テーブル名, フィールド名はコマンドの中で置換しなければいけない ことがよくあります。このような置換が必要なことを示すために、このマニュア ルは db_name, tbl_name, col_name を使用します。 例えば、次のようなステートメントを見た場合:

mysql> SELECT col_name FROM db_name.tbl_name;

これは、同様のステートメントを入力するためには、おそらく次のように、あな た自身のデータベース名, テーブル名, フィールド名を供給することを意味します:

mysql> SELECT author_name FROM biblio_db.author_list;

SQL ステートメントは大文字でも小文字でも記述できます。このマニュアルが SQL ステートメントを示すときは、特別なキーワードを説明している時には(そ れを強調するために)そのキーワードに大文字が使用され、残りのステートメン トに小文字が使用されます。SELECT ステートメントの説明中には次が見 られるでしょう:

mysql> SELECT count(*) FROM tbl_name;

一方、COUNT() 関数の説明中では、ステートメントは次のように書かれ ます:

mysql> select COUNT(*) from tbl_name;

特別な強調が意図されない場合、全てのキーワードは大文字で書かれます。

構文の説明中では、角括弧(`['`]')はオプションの単語や節であ ることを示すために使用されます:

DROP TABLE [IF EXISTS] tbl_name

構文要素がいくつかのものからなる場合、垂直バー(`|')で区切られます。 選択セットから一つのメンバを選ぶことができるときは、角括弧中にリストされ ます。選択セットから一つのメンバを選ぶ必要があるときは、波括弧(`{'`}')中にリストされます:

TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
{DESCRIBE | DESC} tbl_name {col_name | wild}

1.3 MySQL の歴史

我々自身の速くて低レベルな (ISAM) ルーチンを使用する、我々のテーブルへ 接続するために、 我々は一度 mSQL を使用するつもりでした。しかし、いくつかのテストの後、我々は mSQL は我々が必要とするほど高速ではなく、柔軟度を持っていないとの 結論に至りました。この結果、mSQL とほとんど同じ API インタフェー スを持つ、我々のデータベースへの新しい SQL インタフェースに帰結しました。 この API はサードパーティコードの移植を簡単にするために選択されました。

MySQL の名前の由来は完全には明らかではありません。我々のベース ディレクトリと多くのライブラリとツールは接頭辞 ``my'' を 10 年以上も使っ ています。しかし、Monty の娘(何年か若い)も My という名前です。そのため、 この2つのどちらが MySQL に名前を与えたかは、我々にとっても未だ 謎です。

1.4 MySQLの主な機能

MySQL の重要な特徴のいくつかを以下の項目にあげます:

1.5 MySQL はどれくらい安定か?

この節では、``MySQL はどれくらい安定か?'' と ``私はこのプロジェ クトで MySQL に依存できるか?'' という質問について回答します。

我々はここで、いくつかの問題を明らかにし、多くの人に関係すると思われるさ らに重要な質問のいくつかを回答することを試みます。この節は、メーリングリ スト(そこではとても活発にバグが報告されています)から取り込まれた情報が一 緒に置かれています。

TcX では、MySQL は 1996 中頃から我々のプロジェクトで何の問題も なく動いていました。広く公にリリースされた時、我々は、MySQL 内 に ``テストされていないコード'' の部分があることに注意しました。これは、 我々とは異なる方法でクエリを作成する新しいユーザによってすぐに見つけられました。 新しい各リリースは、(多くの新しい機能を持っているのに)前のものよりも問題 は少なくなります。そして次のリリースの一つを ``安定'' と呼ぶことができるよ うに我々は望んでいます。

MySQL の各リリースは実用的で、ユーザが ``グレイゾーン'' からの コードの使用を開始する時にだけ問題があります。当然、外部のユーザは、何が グレイゾーンかを知ることができません; この節で現在知られているこれらを示 してみます。 説明は MySQL の 3.22.x バージョンで扱われます。知られていて報告 されているバグは全て最新のバージョンで修正されています。bugs 節に 書かれているバグは除きます。それらは ``設計'' 関連のものです。 「E MySQL での既知のエラーと欠けているデザイン」節参照.

MySQL は複数の階層と様々な独立モジュールで書かれています。これ らのモジュールは、それぞれがどのようにテストされているかとともに次にリス トされています:

ISAM テーブル処理 -- 安定
これは MySQL 3.22 とそれ以前のバージョンにおいて、 全てのデータの保存と検索を管理します。全ての MySQL リリースでは、 このコード内には(報告された)バグは一つもありません。不正なテーブルを得る 唯一の方法は、更新の途中にあるサーバを殺すことだけです。そして各クエリ間 で全てのデータはディスクにフラッシュされるため、いかなるデータも 修復外の破壊が起こるということはまずないでしょう。 MySQL 内のバグのためにデータが 失われたというバグレポートは一つもありません。
The MyISAM table handler -- Beta
これは MySQL 3.23 での新機能です. これは ISAM テーブルのコードを元に拡張されていますが、 多くの便利な機能を持っています。
パーサと単語解析 -- 安定
このシステム内には長い間バグは一つも報告されていません。
C クライアントコード -- 安定
知られている問題はありません。3.20 リリースの初期には、送信/受信バッファ サイズにいくつかの制限がありました。3.21.x 以降、バッファはデフォルトの 24M まで動的に大きくなります。
標準クライアントプログラム -- 安定
これらは mysql, mysqladmin, mysqlshow, mysqldump, mysqlimport を含みます.
基本的な SQL -- 安定
基本的な SQL 機能システムと文字列節と動的メモリ処理。このシステムには報 告されたバグは一つもありません。
クエリオプティマイザ -- 安定
範囲オプティマイザ -- 安定
結合オプティマイザ -- 安定
ロック -- ガンマ
これはとてもシステムに依存しています。いくつかのシステムでは、これは、標 準 OS ロック (fcntl) を使用するため大きな問題があります。これらの場合で は、MySQL デーモンを --skip-locking フラグつきで動かすべ きです。知られている問題は、いくつかの Linux システムと NFS マウントされ たファイルシステム使用時の SunOS です。
Linux スレッド -- ガンマ
fcntl() コールでだけ問題が見つかっています。これは mysqld への --skip-locking オプションの使用で修正できます。何人かは 0.5 リリースで lockup 問題を報告しました。
Solaris 2.5+ pthread -- 安定
我々は、我々の全ての製品でこれを使用しています。
MIT スレッド (他のシステム) -- ガンマ
3.20.15 から報告されたバグはありません。3.20.15 から知られたバグはありま せん。いくつかのシステムでは、いくつかの操作が遅くなるという ``misfeature'' があります(1/20 秒の sleep が各クエリ間で行なわれます)。 もちろん、MIT スレッドはすべてを少し遅くします。しかしインデックスベース の SELECT では、ステートメントは通常一度のフレームで行われるため、 mutex locking/thread juggling はありません。
他のスレッド実装 -- アルファ - ベータ
他のシステムへの移行はまだとても新しく、多分 MySQL に、しかし一 番多いのはスレッド実装自身に、多くのバグを持っています。
LOAD DATA..., INSERT ... SELECT -- 安定
何人かはこれにバグを見つけたと考えましたが、それは結局誤解でした。問題の 報告の前にマニュアルを良くチェックしてください!
ALTER TABLE -- 安定
3.22.12 で少し変更しました。
DBD -- 安定
現在、Jochen Wiedmann wiedmann@neckar-alb.de によってメンテされています。感謝!
mysqlaccess -- ガンマ
Yves.Carlier@rug.ac.be によって書かれメンテされてます。感謝!
GRANT -- ガンマ
MySQL 3.22.12 で大きな変更が行なわれました。
MyODBC (uses ODBC SDK 2.5) -- ガンマ
いくつかのプログラムでちゃんと動作しているように見えます。

TcX は代金を支払った顧客のために email サポートを提供しています。しかし MySQL メーリングリストは通常、全ての一般的な質問に回答を提供し ています。バグは通常すぐにパッチで修正され、深刻なバグには、ほとんどいつ も新しいリリースがあります。

1.6 2000 年対応

MySQL 自身は 2000 年問題(Y2K)に対して何の問題も持っていません:

2000年安全でない方法で MySQL を使用するアプリケーションでは問題 になります。例えば、多くの古いアプリケーションは4桁値ではなく2桁値(これ は曖昧です)を使用して年を格納し操作します。この問題は、00 または 99 のような値を ``欠けている'' 値の表われとして使用するアプリケー ションによって作られます。

あいにく、これらの問題を修正するのは困難です。様々なアプリケーションが様々 なプログラムによって書かれていて、その各々が慣習と日付操作関数の様々な組 み合わせを使用するからです。

これは、MySQL が 2030 年までの日付に何の問題もないことを示す簡単なテスト です!

mysql> DROP TABLE IF EXISTS y2k;
mysql> CREATE TABLE y2k (date date, date_time datetime, time_stamp timestamp);
mysql> INSERT INTO y2k VALUES ("1998-12-31","1998-12-31 23:59:59",19981231235959);
mysql> INSERT INTO y2k VALUES ("1999-01-01","1999-01-01 00:00:00",19990101000000);
mysql> INSERT INTO y2k VALUES ("1999-09-09","1999-09-09 23:59:59",19990909235959);
mysql> INSERT INTO y2k VALUES ("2000-01-01","2000-01-01 00:00:00",20000101000000);
mysql> INSERT INTO y2k VALUES ("2000-02-28","2000-02-28 00:00:00",20000228000000);
mysql> INSERT INTO y2k VALUES ("2000-02-29","2000-02-29 00:00:00",20000229000000);
mysql> INSERT INTO y2k VALUES ("2000-03-01","2000-03-01 00:00:00",20000301000000);
mysql> INSERT INTO y2k VALUES ("2000-12-31","2000-12-31 23:59:59",20001231235959);
mysql> INSERT INTO y2k VALUES ("2001-01-01","2001-01-01 00:00:00",20010101000000);
mysql> INSERT INTO y2k VALUES ("2004-12-31","2004-12-31 23:59:59",20041231235959);
mysql> INSERT INTO y2k VALUES ("2005-01-01","2005-01-01 00:00:00",20050101000000);
mysql> INSERT INTO y2k VALUES ("2030-01-01","2030-01-01 00:00:00",20300101000000);
mysql> INSERT INTO y2k VALUES ("2050-01-01","2050-01-01 00:00:00",20500101000000);
mysql> SELECT * FROM y2k;
+------------+---------------------+----------------+
| date       | date_time           | time_stamp     |
+------------+---------------------+----------------+
| 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 |
| 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 |
| 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 |
| 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 |
| 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 |
| 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 |
| 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 |
| 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 |
| 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 |
| 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 |
| 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 |
| 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 |
| 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 |
+------------+---------------------+----------------+

13 rows in set (0.00 sec)

これは、DATEDATETIME 型は未来のいかなる日付において 問題のないことををしめします (これら日付は 9999 年まで扱えます)

TIMESTAMP 型は、時刻を保存しますが、2030-01-01 までです。 TIMESTAMP は 32-bit マシンでは 1970 から 2030 の範囲です。 64-bit マシンでは、 2106 年まで扱えれます。

MySQL は 2000年対応ですが、曖昧でない入力を提供するのはあなたの 責任です。曖昧な日付の入力データ(2桁の年の値)の扱いについての MySQL の規則については 「7.3.6.1 西暦2000年問題とデータ型」節 を参照してください。

1.7 一般的な SQL 情報とチュートリアル

この本は MySQL メーリングリストの数人によって推奨されています:

Judith S. Bowman, Sandra L. Emerson and Marcy Darnovsky
The Practical SQL Handbook: Using Structured Query Language
Second Edition
Addison-Wesley
ISBN 0-201-62623-3
http://www.awl.com

この本も MySQL ユーザーにいくつかの推薦を受けています:

Martin Gruber
Understanding SQL
ISBN 0-89588-644-8
Publisher Sybex 510 523 8233
Alameda, CA USA

SQL チュートリアルがネット上にあります http://www.geocities.com/SiliconValley/Vista/2207/sql1.html

SQL in 21 Tagen (online book in German language): http://www.mut.de/leseecke/buecher/sql/inhalt.htm

1.8 便利な MySQL 関連リンク

1.8.1 Tutorials

1.8.2 Porting MySQL / Using MySQL on different systems

1.8.3 Perl related links

1.8.4 MySQL discussion forums

1.8.5 Commercial applications that support MySQL

1.8.6 SQL クライアント

1.8.7 MySQL をサポートする Web 開発ツール

1.8.8 Databse design tools with MySQL support

1.8.9 MySQL ツールでの Web サーバ

1.8.10 Extensions for other programs

1.8.11 Using MySQL with other programs

1.8.12 ODBC related links

1.8.13 API 関連リンク

1.8.14 他の MySQL 関連リンク

1.8.15 SQL とデータベースインタフェース

1.8.16 例とソース

1.8.17 一般的なデータベースリンク

MySQL を使用した多くの web ページもあります。 「A Some MySQL users」節参照。この リストへ追加できるものを webmaster@mysql.com に送ってください。 We now require that you show a MySQL logo somewhere (It is okay to have it on a ``used tools'' page or something similar) to be added.


Go to the first, previous, next, last section, table of contents.