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


1 概要

MySQL (TM) ソフトウェアはとても高速で、マルチスレッド、マルチユーザの、頑丈な SQL (Structured Query Language)データベースサーバです。 MySQL Server は、大量に配備されるフトウェアへ組み込まれるときと同じように、 ミッションクリティカルで高負荷な生産システム用に意図されています。 MySQLMySQL AB の商標です。

MySQL ソフトウェア は デュアルライセンス です。 あなたは、MySQLGNU GENERAL PUBLIC LICENSE (http://www.gnu.org/licenses/) にしたがって、 Open Source/Free Software として利用できます。 あるいは、GPL の条件が合わない場合には、 コマーシャルライセンスを MySQL AB から購入することも可能です。 「1.4 MySQL ライセンスとサポート」節参照.

MySQL ウェブサイト (http://www.mysql.com/) には MySQL ソフトウェア についての最新情報があります。

次のリストはマニュアルのなかで特に興味を引くいくつかの節を説明しています:

重要:

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

バグレポートを生成するためには mysqlbug スクリプトを使用すべきです。

ソースディストリビューションでは、mysqlbug スクリプトは `scripts' ディレクトリ に見つけることができます。バイナリディストリビューションでは、mysqlbug`bin' ディレクトリ(MySQL-server RPM パッケージでは `/usr/bin') に見つけることができます。

MySQL Server のセキュリティバグを発見した場合は、 security@mysql.com に email を送ってください。

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

これは MySQL のリファレンスマニュアルです; これは MySQL バージョン 4.0.12 について記述しています。 機能上の変更は、かならずそのバージョンを示されます。 そのため、MySQLソフトウェアの古いバージョンを使っていても、 このマニュアルは通用します。

これはリファレンスマニュアルであるので、一般的な SQL やリレーショナルデータベース概念の説明書ではありません。

MySQL Database Software は発展中なので、マニュアルは頻繁に更新されます。そのため、 オンラインで参照しない限り、このバージョンが期限切れである可能性があります。 このマニュアルの最新バージョンは http://www.mysql.com/documentation/ に多 様な形式で置いてあります。 このマニュアルは現在 HTML, PDF, Windows HLP バージョンがあります。

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

マニュアル内の情報を見つけるのがつらいなら、 検索可能なバージョン http://www.mysql.com/doc/ を 試せます。

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

このマニュアルは当初、David Axmark, Michael (Monty) Widenius によって書かれました。 現在は Michael (Monty) Widenius, Arjen Lentz, Paul DuBois によって維持されています。他の貢献者については 「C Credits」節 を参照してください。

日本語訳は、以下の方々により行われました。 (ハンドル名だけ書きます。敬称略。翻訳サーバに登録した順 :) ):

このマニュアルの著作権(2003)は、スウェーデンの会社 MySQL ABが所有しています。 「1.4.2 Copyrights and Licenses Used by MySQL」節参照.

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

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

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

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

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

shell> VARNAME=value some_command

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

shell> setenv VARNAME value
shell> some_command

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

mysql> SELECT col_name FROM db_name.tbl_name;

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

mysql> SELECT author_name FROM biblio_db.author_list;

SQL 文は大文字でも小文字でも記述できます。このマニュアルで は大文字で記述します。

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

DROP TABLE [IF EXISTS] tbl_name

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

TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)

選択セットから一つのメンバを選ぶ必要があるときは、波括弧(`{'`}')中に列挙されます:

{DESCRIBE | DESC} tbl_name {col_name | wild}

1.2 MySQL とは何か

MySQLは、もっとも有名な オープンソース SQLデータベースで、 MySQL AB によって開発、供給されています。MySQL ABMySQL データベースに関わるサービスを提供するビジネスを構築する 営利会社です。 「1.3 MySQL AB とは何か」節参照.

MySQL ウェブサイト(http://www.mysql.com/)は、MySQLMySQL AB に ついての最新情報を提供しています。

MySQL はデータベース管理システムです。
データベースはデータの集まりで構成されています。絵画のギャラリーの単純な ショッピングリストや共通ネットワーク内での膨大な量の情報からもなり得ます。 コンピュータデータベースに格納されたデータの追加、アクセス、処理のために は、MySQL サーバのようなデータベース管理システムが必要です。コンピュー タは大量のデータの処理がたいへん得意なので、データベース管理システムは 単独で動作するユーティリティや他のアプリケーションの一部として、コンピュー タの中で中心的な役割を演じています。
MySQL は関係データベース管理システムです。
関係データベースはデータを大きな格納場所に全てのデータを置くのではなく、 別々のテーブル内に格納します。これは速度と柔軟性を追加します。要求された いくつかのテーブルからデータを結合することを可能とする関係を定義すること により、テーブルがリンクされます。MySQLSQL 部分は "構造化問合せ 言語 (Structured Query Language)" を表しています。これは、データベー スのアクセスに使用される最も有名な標準言語です。
MySQL ソフトウェアは オープンソース です。
オープンソースの意味は誰でも使用し変更することができるということです。誰 でも MySQL ソフトウェアをインターネットからダウンロードし、無償で使 えます。その気があれば誰でも必要に応じてソースコードを調べ、 変更できます。MySQL ソフトウェア は GPL (GNU General Public License) http://www.gnu.org/licenses/ にしたがいます。これは、様々な状況でそ のソフトウェアで行えることと行えないことを定義しています。もし GPL を嫌だと感じていたり、MySQL を商用アプリケーションに組み込む必 要があるなら、商用ライセンス版を私たちから購入することができます。 「1.4.3 MySQL Licenses」節参照.
何故 MySQL データベースサーバを使用するのか?
MySQL Database Server はとても速く、信頼でき、簡単に使用できます。それがあなた が探しているものなら、試してみるべきです。MySQL Server は、私たちのユー ザと協力して開発されたとても実用的な機能がひとそろいあります。私たちのベ ンチマークページ上で、MySQL Server と他のいくつかのデータベース管理シ ステムの性能比較を見つけることができます。 「5.1.4 The MySQL Benchmark Suite」節参照. MySQL Server は、既存のソリューションよりも速く、とても大きなデータベー スを処理するために独自に開発され、そして、高い需要がある実運用環境で何年間もの使用に耐え てきました。不断の開発下で、MySQL Server は今日、 豊富でとても有用な機能セットを提供します。MySQL は、結合性、速 度、セキュリティでインターネット上でのデータベースアクセスに高く適合しま す。
MySQL の技術機能。
詳しい技術情報については、 「6 MySQL Language Reference」節。MySQL Database Software は、様々なバッ クエンドをサポートするマルチスレッド SQL サーバ、いくつかのクライアント プログラム、ライブラリ、管理ツール、プログラミングインタフェース(API)から成る クライアント/サーバシステムです。 また、MySQL サーバ をアプリケーションに リンクできるマルチスレッドライブラリとしても提供していて、これにより、 より小さく、速く、管理しやすい製品が作れます。
MySQL は多くの貢献ソフトを持っています。
おそらく、すでに MySQL Database Server をサポートする、あなたの好きなアプリケー ション/言語を見つけることができるでしょう。

MySQL の公式な発音は ``My Ess Que Ell'' です(MY-SEQUEL ではあり ません)。 しかし MY-SEQUEL と発音する人を正すことは避けています。

1.2.1 MySQL の歴史

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

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

1.2.2 MySQL の主な機能

MySQL Database Software の重要な特徴のいくつかを以下の項目に挙げます。 「1.5 MySQL 4.x はやわかり」節参照.

内部と移植性
カラムの型
コマンドと関数
セキュリティ
拡張性と限界
接続性
地域化
クライアントとツール

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

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

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

80年代初期からあるオリジナルのコードの中心部は、安定したコードの基礎とな っています。ISAMテーブル形式は、後方互換性が保たれています。TcX (MySQL AB の前身)では、MySQL は 1996 中頃から私たちのプロジ ェクトで何の問題もなく動いていました。MySQL Database Software が 広く公にリリースされたとき、私たちは、MySQL 内に ``テストされていないコード '' の部分があることに注意しました。これは、私たちとは異なる方法でクエリを 作成する新しいユーザによってすぐに見つけられました。新しい各リリースは、 (多くの新しい機能を持っているのに)前のものよりも問題は少なくなります。そ して次のリリースの一つを ``安定'' と呼ぶことができるように私たちは望んでい ます。

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

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

Replication -- Gamma
レプリケーションを使用した大規模なサーバクラスタは製品として使用され良い 結果をもたらしています。拡張されたレプリケーション機能に対する取り組みは MySQL 4.x でも引き続き行われます。
InnoDB tables -- Stable (3.23 では 3.23.49から)
InnoDB storage engines は MySQL 3.23 ツリーでは version 3.23.49 から安定です。InnoDB は大規模で負荷の大きい製品システムで 使用されています。
BDB tables -- Gamma
Berkeley DBはとても安定したコードですが、未だに BDB トラン ザクションstorage engines インターフェースに対し MySQL Server で は改良を加えている途中であり、他のテーブルタイプと同等に扱われるまでには もう少し時間がかかりそうです。
FULLTEXT -- Beta
テキストの検索は動作しているように見えますが、まだ広く使用されていません。 重要な拡張を MySQL 4.0 で行っています。
MyODBC 3.51 (uses ODBC SDK 3.51) -- Gamma
だんだん広く使われるようになっています。アプリケーションに関係したり、 ODBCドライバーか、その下のデータベースサーバに関係ない問題が出ています。
MyISAM テーブルの自動復旧 -- Gamma
これは、MyISAM ストレージエンジンの新しいコードに対してだけです。 新しい MyISAM ストレージエンジンは、テーブルをオープンするとき、 前にそのテーブルが正しくクローズされたか調べ、正しくクローズされていない ときは自動的に検査と復旧を実行します。
Bulk-insert -- Alpha
MySQL 4.0 での MyISAM テーブルへ大量のレコードを高速に挿入 する新しい機能です。
ロック -- ガンマ
これはとてもシステムに依存しています。いくつかのシステムでは、これは、標 準 OS ロック (fcntl()) を使用するため大きな問題があります。これら の場合では、MySQL デーモンを --skip-external-locking フラグつきで 動かすべきです。知られている問題は、いくつかの Linux システムと NFS マウ ントされたファイルシステム使用時の SunOS です。

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

1.2.4 MySQLではどれだけテーブルを大きくできるの?

MySQL Version 3.22では、最大テーブルサイズに 4Gバイトという制限が ありました。MySQL Version 3.23から採用された新しい MyISAM では、最大テーブルサイズは800万テラバイト( 2 ^ 63 バイト)に拡張されまし た。

ただし、OSの側にも、ファイルサイズの制限が存在していることには注意して下 さい。いくつか例を示します:

オペレーティングシステム ファイルサイズの制限
Linux-Intel 32 bit 2Gバイト, 4Gバイト あるいはそれ以上, Linux のバージョンによる。
Linux-Alpha 8Tバイト (?)
Solaris 2.5.1 2Gバイト (パッチにより 4G に対応)
Solaris 2.6 4Gバイト (フラグで変更可能)
Solaris 2.7 Intel 4Gバイト
Solaris 2.7 UltraSPARC 512Gバイト

Linux 2.2 では、ext2ファイルシステム用のLFSパッチを適用することで、2G バ イト以上のテーブルを使用することができます。Linux 2.4ではReiserFS用の同 様のパッチが存在し、大きなファイルを扱うことができるようになります。(訳 注: Linux 2.4.1 以上では、最初から ReiserFS がカーネルのソースに組み込 まれていますし、2.4.16 以上では、ext3 もカーネルのソースに組み込まれまし た)

以上からわかるように、MySQL の最大テーブルサイズはOSの制限によっ て決まることがほとんどです。

デフォルトでは、MySQL の最大テーブルサイズは4Gに設定されています。 あるテーブルの最大テーブルサイズは、SHOW TABLE STATUS コマンドか、 myisamchk -dv table_name によって確認することができます。 「4.5.6 SHOW 構文」節参照.

もしも4G 以上のテーブルが必要な場合には(加えて、OSがそれをサポートして いる場合には)、テーブルを作る際に、AVG_ROW_LENGTHMAX_ROWS パラメータを設定することができます。 「6.5.3 CREATE TABLE 構文」節参照. テーブル作成後に、ALTER TABLE で変更することもできます。 「6.5.4 ALTER TABLE 構文」節参照

読み込み専用の大きなテーブルが必要なときは、myisampackを使って複 数のテーブルを一つにまとめた上で圧縮することができます。myisampack は、テーブルの大きさをだいたい50%程度まで圧縮できます。結果として、より 大きなテーブルを作ることが可能となるでしょう。 「4.7.4 myisampack, MySQL の圧縮された読み込み専用テーブルジェネレータ」節参照.

MyISAMデータファイルに対する、OSのファイル制限を回避するのに、 RAID オプションを使うこともできます。 「6.5.3 CREATE TABLE 構文」節参照.

MERGE ライブラリ -- 同じ構造のテーブルをひとまとめに扱う機能を提 供します -- を使用するという解決法も考えられるでしょう。 「7.2 MERGE Tables (3.23.25以上)」節参照.

1.2.5 2000 年対応

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

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

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

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

mysql> DROP TABLE IF EXISTS y2k;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE y2k (date DATE,
    ->                   date_time DATETIME,
    ->                   time_stamp TIMESTAMP);
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO y2k VALUES
    -> ("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",20500101000000);
Query OK, 13 rows affected (0.01 sec)
Records: 13  Duplicates: 0  Warnings: 0

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 マシンで(signed value)は 1970 から 2030 の範囲です。64-bit マシンでは、 2106 年(unsigned value)まで扱えれます。

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

1.3 MySQL AB とは何か

MySQL AB は、MySQL の創始者と主な開発者の会社です。

MySQL AB は、最初は、David Axmark、Allan Larsson、Michael Monty Wideniusらによってスウェーデンに設立されました。

MySQL サーバの開発者は、この会社に雇われています。わたしたちは、 世界中の1ダースものの国々の人によるバーチャルな組織です。わたしたちは、 毎日、広くネットを使って、互いに連絡しあい、また、ユーザや支援者やパート ナーと連絡しています。

私たちは、MySQL の開発と私たちのデータベースを新しいユーザに広げるこ とに専念しています。MySQL ABMySQLサーバソースコードの著 作権, MySQL logo の著作権, MySQL 商標権,このMySQL マニュアルの著 作権を所有します。 「1.2 MySQL とは何か」節参照.

MySQLの核の価値は、わたしたちの MySQLOpen Source に対する献身を示しています。

私たちは MySQL Database Software を次のようにしています。

MySQL ABMySQL AB の人々は次を行います。

MySQL ウェブサイト(http://www.mysql.com/)は、MySQL と MySQL AB に ついての最新情報を提供しています。

1.3.1 MySQL AB のビジネスモデル及びサポート

私たちが最もよく受ける質問は:「どのようにして無料で配布して採算を 取っているのでしょうか?」というものです。それは、このようにしています。

MySQL AB はサポート、サービス、商用ライセンス及びロイアリティで利 益をあげます。そして、私たちは製品開発とMySQLの事業を展開するため、 これらの収益を利用します。

MySQL AB は創業以来、利益が増えています。2001年10月、私たちは有数のスカ ンジナビアの投資家および数少ないビジネスエンジェルからのベンチャー投資に 応じました。この投資は、私たちのビジネス・モデルを固め、持続的成長の基盤 を構築するために使用されます。

1.3.1.1 サポート

MySQL AB は、MySQL データ・ベースの設立者及び主な開発者に より管理・運営されます。開発者は顧客及びその他のユーザの要望・課題を連絡 をとり続けるためのサポートを提供することを約束します。私たちの全てのサポー トは有能な開発者によって提供されます。実際に複雑な質問は、MySQLサ ーバーの主要な著者である Michael Monty Widenius が答えます。 「1.4.1 Support Offered by MySQL AB」節参照.

さらなる情報とサポートの依頼は、http://www.mysql.com/support/ か、 私たちの販売員 sales@mysql.com にご連絡ください。

1.3.1.2 トレーニングと認定

MySQL ABMySQL と関連したトレーニングを世界的に提供しま す。私たちは、一般公募するコースと、あなたの会社のニーズに合せた特別な社内 研修の両方を提供します。MySQL トレーニング はさらに、私たちのパート ナーであるMySQL 認定 トレーニング・センター でも受講ができます。

私たちのトレーニングの教材は、いくつかのデータベースの実例と資料・説明書、 そしてサンプルアプリケーションを使用します。また、教材は MySQL の 最新バージョンを反映するために常時更新されます。私たちの講師は、トレーニン グの質と教材の開発を保証するため、常に開発チームにサポートされます。これ は、さらにトレーニング中の質問には必ず回答できることを保証します。

私たちのトレーニング講座に参加することにより、あなたの目標と MySQL アプリケーションを実現することができるでしょう。さらに以下のことができる でしょう:

参加予定者あるいはトレーニング・パートナーとして私たちのトレーニングに興味 を持っている場合、http://www.mysql.com/training/のトレーニング課 にアクセスするか、あるいは training@mysql.com にメールで連絡を ください。

MySQL 認定プログラム についての詳細な情報は ,http://www.mysql.com/certification/ を参照してください。

1.3.1.3 コンサルティング

MySQL AB認定パートナー は、全世界の MySQLサーバ のユーザとMySQLサーバを自身のソフトウェアに組み入れようとしている ユーザにコンサルティングサービスを提供します。

わたしたちのコンサルタントは、データベースの設計と調整、効率のよい問合 せの作成、最適な性能のためのプラットホームの調整、移植の問題の解決、レ プリケーションの設定、頑強なトランザクションアプリケーションの作成とい つたことを助けます。

わたしたちは、お客様がご自身のアプリケーションにMySQL Serverを組 み込むことを手助けし、大規模なアプリケーションを作ることを手助けします。

私のコンサルタントは、あなたの開発チームと密接に協力して作業します。この ことは、わたしたちの専門サービスの品質を確実にします。コンサルティングの 割り当ては、2日間の強力開始期間から、何週間も何ヶ月にもわたるプロジェク トに広がります。わたしたちの専門意見は MySQLサーバ だけを含むので はなく、PHPやPerlやほかのスクリプティング言語とプログラミングにも広がっ ています。

もし、わたしたちのコンサルティングサービスやコンサルティングパートナーに なることに興味をもったときは、私たちのコンサルティングセクションのWeb サ イト http://www.mysql.com/consulting/ を訪れるか、コンサルティン グスタッフ consulting@mysql.com に連絡してください。

1.3.1.4 商用ライセンス

MySQL データベースは、GNU General Public License (GPL) のもとでリリースされています。これは、MySQL ソフトウ ェアは GPL のもと、無償で使えることを意味します。 GPL の条 件項目(あなたのアプリケーションもまた GPL にしなければならない)に 束縛されたくないならば、MySQL AB から同じ製品の商用ライセンスを購 入しなければなりません; http://www.mysql.com/products/pricing.html

MySQL ソースコードの著作権は MySQL AB が所有するため、わた したちは デュアルライセンス を採用することができます。このことは、同 じ製品に GPL と商用ライセンスの両方があるということです。これはど うあろうと MySQL AB のオープンソースの遂行には影響しません。商用 ライセンスが必要なときは、 「1.4.3 MySQL Licenses」節 を参照してください。

わたしたちは、MySQLサーバ に機能を追加するサードパーティーの オープンソースGPL ソフトウェアの商用ライセンスも販売しています。 よい例は、InnoDB トランザクション対応ストレージエンジンです。この エンジンは、ACIDが使え、低水準のロック、破壊からの回復、マルチバージョニ ング、外部キーが使えるといった特徴があります。 詳しくは 「7.5 InnoDB テーブル (3.23.6以上)」節参照 を 参照してください。

1.3.1.5 パートナー

MySQL AB は、トレーニングコース、コンサルティングとサポート、出版、 MySQL 関連製品の再販と販売に関する、全世界のパートナープログラム をもっています。 MySQL AB パートナーは、webサイト http://www.mysql.com/で公開され、製品を識別しビジネスを推進するた めの MySQL のトレードマークの特別バージョンを使う権利が得られます。

もし、MySQL AB パートナーになることに興味をおもちならば、 partner@mysql.com に 電子メールを送ってください。

MySQL の単語と MySQL のイルカのロゴは、MySQL ABのトレードマークです。 「1.4.4 MySQL AB Logos and Trademarks」節参照。

このトレードマークは、 MySQL の創設者が何年にもわたって築いてきた 重要な価値の象徴です。

1.3.1.6 広告

MySQL のwebサイト (http://www.mysql.com/)は、開発者とユー ザの間では人気があります。2001年10月で、1千万ページビューがありました。 訪問者は、購入の決定者とソフトウェアとハードウェアの両方の推奨者のグルー プです。訪問者の12%は購入の決定を承認し、たった9%が購入決定に関わってい ませんでした。65%以上が、半年の間に何らかのオンラインビジネスの購入をし ていて、70%が数ヶ月の間に購入を計画していました。

1.3.2 連絡先の情報

MySQL のwebサイト(http://www.mysql.com/)にはMySQLMySQL AB の最新の情報があります。

報道サービスやわたしたちのニュースリリース (http://www.mysql.com/news/)に書かれていない質問は、 press@mysql.com に電子メールを送ってください。

MySQL AB との間に有効なサポート契約があるならば、あなたは、 MySQL ソフトウェアの技術的な質問に対する正確な答えがタイムリーに 得られます。より詳しい情報は、 「1.4.1 Support Offered by MySQL AB」節.私たちのwebサイト、 http://www.mysql.com/support/ を見るか、sales@mysql.com にメールを送ってください。

MySQL トレーニングについての情報は、 http://www.mysql.com/training/ のトレーニング節を訪れてください。 インターネットにアクセスできないときは、training@mysql.comMySQL AB トレーニングスタッフに連絡してください。 「1.3.1.2 トレーニングと認定」節参照。

MySQL 認定プログラム に関する情報は、 http://www.mysql.com/certification/を見てください。 「1.3.1.2 トレーニングと認定」節参照。

コンサルティングに興味があるならば、 http://www.mysql.com/consulting/ のコンサルティング部門を見てくだ さい。インターネットにアクセスできないときは、 consulting@mysql.comMySQL AB コンサルティングスタッ フに連絡してください。 「1.3.1.3 コンサルティング」節参照.

商用ライセンスは、https://order.mysql.com/ でオンラインで購入でき ます。MySQL AB にどうやって購入のFAXを送るかの情報もあります。よ り詳しい情報はhttp://www.mysql.com/products/pricing.html にありま す。もし、ライセンスに関する質問があったり、大量のライセンスの見積もりが 必要なときは、webサイト(http://www.mysql.com/)の連絡用紙に記入す るか、licensing@mysql.com (ライセンスの質問用)に電子メールを送 るか、sales@mysql.com (セールスの見積もり用) に電子メールを送っ てください。 「1.4.3 MySQL Licenses」節参照.

ビジネスで MySQL AB のパートナーに興味があるときは、 partner@mysql.com に電子メールを送ってください。 「1.3.1.5 パートナー」節参照.

MySQL のトレードマークの考え方は、 hhttp://www.mysql.com/company/trademark.htmlを見るか、 trademark@mysql.com に電子メールを送ってください。 「1.4.4 MySQL AB Logos and Trademarks」節参照.

もし、MySQL AB のジョブ選択 (http://www.mysql.com/company/jobs/)にある仕事に興味があるならば、 jobs@mysql.com に電子メールを送ってください。あなたのCV(履歴書) は添付しないで、プレーンテキストであなたの電子ールの最後につけてください。

多くのユーザの間の一般的な議論は、適切なメーリングリストに注意してくだい。 「1.6.1 MySQL メーリングリスト」節参照.

エラー(多くの場合はバグと呼ばれます)の報告、同じように質問やコメントは、 mysql@lists.mysql.com のメーリングリストに送ってください。 MySQLサーバ に要注意のセキュリティホールが見つかったときは、 security@mysql.com に電子メールを出してください。 「1.6.1.3 バグや問題を報告する方法」節参照.

公開してよいベンチマークの結果があるときは、benchmarks@mysql.com に連絡してください。

このマニュアルに対する追加や修正は、docs@mysql.com のマニュアル チームに連絡してください。

MySQL のwebサイト(http://www.mysql.com/)に対する作業や内容 のコメントや質問は、webmaster@mysql.com に電子メールを出してく ださい。

MySQL AB にはプライバシーポリシーがあります。それは、 http://www.mysql.com/company/privacy.html で読めます。このポリシ ーに関して質問があれば privacy@mysql.com に電子メールを送ってく ださい。

その他の質問は、info@mysql.com に電子メールを送ってください。

1.4 MySQL ライセンスとサポート

(訳注: ライセンスの章については、正確さをきすため原文を併記しています。 訳文だけでなく原文に目を通してください。もし意味の取違いを見つけたなら、 takeshi@SoftAgency.co.jp に連絡してください。)

このセクションでは、MySQLのサポートとライセンス規定について説明します。

1.4.1 Support Offered by MySQL AB

Technical support from MySQL AB means individualised answers to your unique problems direct from the software engineers who code the MySQL database engine.

We try to take a broad and inclusive view of technical support. Almost any problem involving MySQL software is important to us if it's important to you. Typically customers seek help on how to get different commands and utilities to work, remove performance bottlenecks, restore crashed systems, understand operating system or networking impacts on MySQL, set up best practices for backup and recovery, utilise APIs, etc. Our support covers only the MySQL server and our own utilities, not third-party products that access the MySQL server, though we try to help with these where we can.

Detailed information about our various support options is given at http://www.mysql.com/support/, where support contracts can also be ordered online. If you have restricted access to the Internet, contact our sales staff at sales@mysql.com.

Technical support is like life insurance. You can live happily without it for years, but when your hour arrives it becomes critically important, yet it's too late to buy it! If you use MySQL Server for important applications and encounter sudden troubles, it might take too long to figure out all the answers yourself. You may need immediate access to the most experienced MySQL troubleshooters available, those employed by MySQL AB.

1.4.2 Copyrights and Licenses Used by MySQL

MySQL AB owns the copyright to the MySQL source code, the MySQL logos and trademarks and this manual. 「1.3 MySQL AB とは何か」節参照. Several different licenses are relevant to the MySQL distribution:

  1. All the MySQL-specific source in the server, the mysqlclient library and the client, as well as the GNU readline library is covered by the GNU General Public License. 「H GNU General Public License」節参照. The text of this license can also be found as the file `COPYING' in the distributions.
  2. The GNU getopt library is covered by the GNU Lesser General Public License. 「I GNU Lesser General Public License」節参照.
  3. Some parts of the source (the regexp library) are covered by a Berkeley-style copyright.
  4. Older versions of MySQL (3.22 and earlier) are subject to a more strict license (http://www.mysql.com/products/mypl.html). See the documentation of the specific version for information.
  5. The manual is currently not distributed under a GPL-style license. Use of the manual is subject to the following terms: Please e-mail docs@mysql.com for more information or if you are interested in doing a translation.

For information about how the MySQL licenses work in practice, please refer to 「1.4.3 MySQL Licenses」節. Also see 「1.4.4 MySQL AB Logos and Trademarks」節.

1.4.3 MySQL Licenses

The MySQL software is released under the GNU General Public License (GPL), which probably is the best known Open Source license. The formal terms of the GPL license can be found at http://www.gnu.org/licenses/. See also http://www.gnu.org/licenses/gpl-faq.html and http://www.gnu.org/philosophy/enforcing-gpl.html.

Since the MySQL software is released under the GPL, it may often be used for free, but for certain uses you may want or need to buy commercial licenses from MySQL AB at https://order.mysql.com/. See http://www.mysql.com/products/licensing.html for more information.

Older versions of MySQL (3.22 and earlier) are subject to a more strict license (http://www.mysql.com/products/mypl.html). See the documentation of the specific version for information. 古いバージョンの MySQL (3.22 とそれ以前) は より制限されたライセンスを有していることに気をつけて下さい (http://www.mysql.com/support/arrangements/mypl.html)。 より詳しくは、それぞれのバージョンに添付のドキュメントを御覧下さい。

Please note that the use of the MySQL software under commercial license, GPL, or the old MySQL license does not automatically give you the right to use MySQL AB trademarks. 「1.4.4 MySQL AB Logos and Trademarks」節参照.

1.4.3.1 Using the MySQL Software Under a Commercial License

The GPL license is contagious in the sense that when a program is linked to a GPL program all the source code for all the parts of the resulting product must also be released under the GPL. Otherwise you break the license terms and forfeit your right to use the GPL program altogether and also risk damages.

You need a commercial license:

If you require a license, you will need one for each installation of the MySQL software. This covers any number of CPUs on a machine, and there is no artificial limit on the number of clients that connect to the server in any way.

For commercial licenses, please visit our website at http://www.mysql.com/products/licensing.html. For support contracts, see http://www.mysql.com/support/. If you have special needs or you have restricted access to the Internet, please contact our sales staff at sales@mysql.com.

1.4.3.2 Using the MySQL Software for Free Under GPL

You can use the MySQL software for free under the GPL if you adhere to the conditions of the GPL. For more complete coverage of the common questions about the GPL see the generic FAQ from the Free Software Foundation at http://www.gnu.org/licenses/gpl-faq.html. Some common cases:

If your use of MySQL database software does not require a commercial license, we encourage you to purchase support from MySQL AB anyway. This way you contribute toward MySQL development and also gain immediate advantages for yourself. 「1.4.1 Support Offered by MySQL AB」節参照.

If you use the MySQL database software in a commercial context such that you profit by its use, we ask that you further the development of the MySQL software by purchasing some level of support. We feel that if the MySQL database helps your business, it is reasonable to ask that you help MySQL AB. (Otherwise, if you ask us support questions, you are not only using for free something into which we've put a lot a work, you're asking us to provide free support, too.)

1.4.4 MySQL AB Logos and Trademarks

Many users of the MySQL database want to display the MySQL AB dolphin logo on their web sites, books, or boxed products. We welcome and encourage this, although it should be noted that the word MySQL and the MySQL dolphin logo are trademarks of MySQL AB and may only be used as stated in our trademark policy at http://www.mysql.com/company/trademark.html.

1.4.4.1 The Original MySQL Logo

The MySQL dolphin logo was designed by the Finnish advertising agency Priority in 2001. The dolphin was chosen as a suitable symbol for the MySQL database since it is a smart, fast, and lean animal, effortlessly navigating oceans of data. We also happen to like dolphins.

The original MySQL logo may only be used by representatives of MySQL AB and by those having a written agreement allowing them to do so.

1.4.4.2 MySQL Logos that may be Used Without Written Permission

We have designed a set of special Conditional Use logos that may be downloaded from our web site at http://www.mysql.com/press/logos.html and used on third-party web sites without written permission from MySQL AB. The use of these logos is not entirely unrestricted but, as the name implies, subject to our trademark policy that is also available on our web site. You should read through the trademark policy if you plan to use them. The requirements are basically:

Contact us at trademark@mysql.com to inquire about special arrangements to fit your needs.

1.4.4.3 When do you need a Written Permission to use MySQL Logos?

In the following cases you need a written permission from MySQL AB before using MySQL logos:

Out of legal and commercial reasons we have to monitor the use of MySQL trademarks on products, books, etc. We will usually require a fee for displaying MySQL AB logos on commercial products, since we think it is reasonable that some of the revenue is returned to fund further development of the MySQL database.

1.4.4.4 MySQL AB Partnership Logos

MySQL partnership logos may only be used by companies and persons having a written partnership agreement with MySQL AB. Partnerships include certification as a MySQL trainer or consultant. Please see 「1.3.1.5 パートナー」節.

1.4.4.5 Using the word MySQL in Printed Text or Presentations

MySQL AB welcomes references to the MySQL database, but note that the word MySQL is a trademark of MySQL AB. Because of this, you should append the trademark symbol (TM) to the first or most prominent use of the word MySQL in a text and where appropriate, state that MySQL is a trademark of MySQL AB. Please refer to our trademark policy at http://www.mysql.com/company/trademark.html for details.

1.4.4.6 Using the word MySQL in Company and Product Names

Use of the word MySQL in product or company names or in Internet domain names is not allowed without written permission from MySQL AB.

1.5 MySQL 4.x はやわかり

MySQL ABが長い間約束してきて、ユーザからは長い間待ち続けられてき た、MySQLサーバ4.0が、http://www.mysql.com/からダウンロードできる ベータとして使えるようになりました。

MySQLサーバ4.0の主要な新しい機能は、わたしたちのこれまでのビジネスとユー ザに前進のギアを入れ、ミッションクリティカルで、高負荷に耐えるデータベー スシステムとしてMySQLデータベースを拡張しています。

1.5.1 段階を踏んだ公開

MySQLは 4.0.6 からガンマ(gamma)とラベルづけられ、4.0.x は2ヶ月以上(最初の1月は アルファで、そしてベータ)、修正が困難な重要な問題も見つからないで使われていて、 実運用に使えます。

少なくとも1ヶ月間重要なバグがなければ、MySQL 4.0 からガンマの接頭辞を取り 除きます。

MySQLソフトウェアの新しい機能は、bk ソースツリーから利用できるMySQL 4.1 で追加され、2003年の最初の四半期にアルファリリースしようとされています。

1.5.2 すぐに使う準備

すべてのバイナリリリースは、検査したすべてのプラットフォームで、エラーな しで、私たちの広範囲のテストスイートに合格しています。MySQL 4.0は多くのユ ーザで検査され、いくつかの大きなサイトで運用に入っています。

1.5.3 組み込み MySQL

libmysqldでMySQL Serverは広範なアプリケーションにふさわしくなります。 組み込み MySQL サーバライブラリを使用することで、MySQL を色々なアプリケ ーション、電子機器(それらにデータベースが利用されていることなどはエンド ユーザが気にすることはない)に埋め込めます。組み込み MySQL は、 インターネットのアプリケーションや、キオスク、ハードウェア、ソフトウェア を組み合わせたもの、高パフォーマンスのインターネットサーバ、CD-ROMに全てが 収まっているデータベース、などの裏方での利用に最適です。

多くのlibmysqldユーザは、MySQLのデュアルライセンスの恩恵をうけ ます。GPLに束縛されたくないユーザは、商用ライセンスでソフトウェアを使え るようになります。組み込みMySQLライブラリは通常のクライアントライブラリ と同じインタフェースを使っているので、便利で使いやすくなっています。 「8.4.9 libmysqld, the Embedded MySQL Server Library」節参照.

1.5.4 MySQL 4.0 から使えるその他の機能

1.5.5 将来の MySQL 4.x の機能

つぎのMySQL Server 4.x リリースでは開発中の次の項目を予定しています。

1.5.6 MySQL 4.1, 次の開発リリース

MySQL Server 4.0 は、MySQL Server 4.1 の新しい機能の基礎となります。その 機能は、入れ子になった副問合せ(4.1)、ストアードプロシージャ (5.0)、MyISAM表の外部キーの一貫性のルール(5.0)で、多くのお客様か らのご要望の一覧のうちで上位となるものです

これらの追加の後に、MySQLデータベースサーバの評論家は、MySQLデータベース 管理システムの欠点を指摘するよりも、より構想力が必要となるでしょう。すでに、長い 間知られている安定性、速度、使いやすさで、MySQLサーバは、切望して いる購入者の要求項目の一覧に適合するでしょう。

1.6 MySQL についての情報源

1.6.1 MySQL メーリングリスト

この節では、MySQLメーリングリストを紹介し、どのように使うかのガイドライ ンを記述します。メーリングリストを購読すると、電子メールのメッセージで、 リストへ送られたすべてを受け取ります。あなたはリストに質問や回答を送るこ とができます。

1.6.1.1 MySQL メーリングリスト

メイン MySQL メーリングリストを購読するには、メッセージを電子メールアド レス mysql-subscribe@lists.mysql.com に送ってください。

メイン MySQL メーリングリストの購読の中止は、メッセージを電子メールアド レス mysql-unsubscribe@lists.mysql.com に送ってください。

メールの購読と購読の中止には、メッセージを送る先のアドレスだけが重要です。 メッセージのサブジェクトと本文は無視されます。

もし、あなたのリプライアドレスがつかえないときは、アドレスを明示的に指定 できます。subscribe あるいは unsubscribe のあとにハイフンを付け、そのあ とにあなたのアドレスを記述します。ただし `@' 文字は `=' に置 き換えて書きます。例えば、 your_name@host.domain で購読したい場 合は、mysql-subscribe-your_name=host.domain@lists.mysql.com 宛に メッセージを送ります。

mysql-subscribe@lists.mysql.commysql-unsubscribe@lists.mysql.com へのメールは ezmlm メーリングリストプロセッサによって自動的に処理されます。 ezmlm についての情報は ezml ウェブサイトを参考してください (http://www.ezmlm.org/)

本メーリングリストへ投稿するには、mysql@lists.mysql.com にメッセージを送ります。 しかし、subscribe あるいは unsubscribe のメールを mysql@lists.mysql.com送らないでください。 これらのアドレスへ送られたメールは、何千ものユーザに配送されてしまいます。

あなたのローカルサイトが多くの mysql@lists.mysql.com の購読者を持て ます。この場合、ローカルのメーリングリストを作り、lists.mysql.com からの 一つのメッセージがそのサイトに送られ、ローカルなリストで複写されるように してください。この場合、ローカルの MySQL リストへの追加と削除は、 あなたのシステム管理者に問い合わせて下さい。

あなたのメーラーでMySQL メーリングリストからのメールを 適切なメールボックスへ振り分けるには、 (振り分け用の)フィルタをメッセージヘッダを頼りに動作するよう設定して下さい。 その場合、List-ID: ヘッダか Delivered-To: ヘッダが 識別の役に立つことでしょう。

次の MySQL メーリングリストがあります:

announce-subscribe@lists.mysql.com announce
これは MySQL と関連プログラムの新しいバージョンのアナウンスのためのリストです。 このリストの流量は少なく、私たちは全ての MySQL ユーザがこのMLに入るべきだと考えています。
mysql-subscribe@lists.mysql.com mysql
MySQL についての一般的な議論のための根幹のリストです。さらに専門的なリ ストで議論すべきものもあることに注意してください。間違ったリストに投稿 しても、答を得られないでしょう。
mysql-digest-subscribe@lists.mysql.com mysql-digest
ダイジェスト形式の mysql リストです。 このリストからは、一日分の全てのメッセージががまとめられた(ダイジェスト)形式で送られてきます。
bugs-subscribe@lists.mysql.com bugs
このリストには、完全で再現可能なバグレポートだけを、mysqlbug を使 用して投稿すべきです(Windows 上で実行している場合は、OS と MySQL バージョンの記述を含めるべきです)。 できれば投稿前にMySQL の最新の安定バージョンか開発バージョンを使用して 問題をテストしてください。 含められたテストケース上で、mysql test < script を使 用することで、誰もがバグを再現できるようにすべきです。このリストに投稿された全て のバグは、次の MySQL リリースで修正されるかドキュメント化されま す。小さなコードの変更だけですめば、私たちはこの問題を修正するパッチを投 稿します。
bugs-digest-subscribe@lists.mysql.com bugs-digest
ダイジェスト形式の bugs リストです。
internals-subscribe@lists.mysql.com internals
MySQL コード上で作業する人のためのリストです。 このリストでもMySQL 開発の議論とパッチの投稿が可能です。
internals-digest-subscribe@lists.mysql.com internals-digest
internals リストのダイジェスト版です。
java-subscribe@lists.mysql.com java
MySQL server と Java についての議論。 多くは JDBC ドライバ (MySQL Connector/J 含む) についてです。
java-digest-subscribe@lists.mysql.com java-digest
java リストのダイジェスト版です。
win32-subscribe@lists.mysql.com win32
Win95, Win98, NT, Win2000 のような Microsoft OS 上の MySQL software に関連するリストです。
win32-digest-subscribe@lists.mysql.com win32-digest
win32 リストのダイジェスト版です。
myodbc-subscribe@lists.mysql.com myodbc
ODBC で MySQL server への接続に関連する全て。
myodbc-digest-subscribe@lists.mysql.com myodbc-digest
myodbc リストのダイジェスト版です。
mysqlcc-subscribe@lists.mysql.com mysqlcc
MySQL MySQL Control Center graphical client 全般についてのリストです。
mysqlcc-digest-subscribe@lists.mysql.com mysqlcc-digest
mysqlcc リストのダイジェスト版です。
plusplus-subscribe@lists.mysql.com plusplus
MySQL の C++ API でのプログラミングについての全て。
plusplus-digest-subscribe@lists.mysql.com plusplus-digest
plusplus リストのダイジェスト版です。
msql-mysql-modules-subscribe@lists.mysql.com msql-mysql-modules
MySQL でサポートする Perl についてのリスト。msql-mysql-modules.
msql-mysql-modules-digest-subscribe@lists.mysql.com msql-mysql-modules-digest
msql-mysql-modules リストのダイジェスト版です。

上述したのと同じ方法で全てのリストの購読または購読中止ができます。あなた の購読または購読中止のメッセージは、mysql ではなく適切なメーリングリス トに送ってください。例えば、myodbc リストを購読または購読中止するには、 myodbc-subscribe@lists.mysql.com または myodbc-unsubscribe@lists.mysql.com にメールを送ります。

メーリングリストから有益な回答が得られない場合、MySQL ABに 有料のサポートを求めることもできます。有料サポートが必要な場合、 MySQL 開発チームに直接御連絡下さい( 「1.4.1 Support Offered by MySQL AB」節参照)。

次の表は英語以外の MySQL メーリングリストを示します。注意: これら は MySQL AB によって運用されていません。そのため、私たちはそれらの 品質を保証できません。

mysql-france-subscribe@yahoogroups.com フランス語メーリングリスト
list@tinc.net 韓国語メーリングリスト
このリストに subscribe mysql your@e-mail.address をメールしてください。
mysql-de-request@lists.4t2.com ドイツ語メーリングリスト
このリストに subscribe mysql-de your@e-mail.address をメールしてください。 これについては http://www.4t2.com/mysql で情報を見つけられます。
mysql-br-request@listas.linkway.com.br ポルトガル語メーリングリスト
このリストに subscribe mysql-br your@e-mail.address をメールしてください。
mysql-alta@elistas.net スペイン語メーリングリスト
このリストに subscribe mysql your@e-mail.address をメールしてください。

1.6.1.2 質問またはバグ報告

メーリングリストへ質問を尋ねる前に、以下の手順を踏んでください:

ここで回答が見つけられない場合は、近くの MySQL 熟練者ととも に調べて下さい。まだあなたの質問の回答が見つけられなければ、先に進み、次 のセクションの mysql@lists.mysql.com へメールを送る方法についてを読んで ください。

1.6.1.3 バグや問題を報告する方法

良いバグレポートを書くのには忍耐が要りますが、それを最初に正しく行うと 私たちとあなたの時間を節約します。 バグについての完全なテストケースを含む良いレポートを書くと、次のリリー スでそのバグが修正される可能性がとても高くなります。 この節では、かなりの、または全く私たち の助けにならないことにあなたの時間を浪費しないように、あなたがレポートを 正しく書くことを手助けします。

私たちは、バグレポートまた可能ならば全ての問題についてのレポートの作成に mysqlbug スクリプトを使用することを奨励します。mysqlbug は ソース配布内の `scripts' ディレクトリ、または、バイナリ配布では MySQL をインストールしたディレクトリ配下の `bin' ディレク トリにあります。mysqlbug を使用できない場合は、この節に挙 げられている全ての必要な情報を含めてください。

mysqlbug スクリプトは、下記の多くの情報を自動的に見つけ出すことで、 レポートの作成を手助けします。しかし、重要な何かが足りない場合、あなたの メッセージにそれを含めてください。この節を慎重に読んで、ここで述べられ ている全ての情報がレポート中に含まれていることを確認してください。

バグや問題を報告する通常の場所は、mysql@lists.mysql.com です。 バグを明確に示すテストケースを作ることができれば、 bugs@list.mysql.com リストにそれを投稿してください。注意: この リストには、完全で再現可能なバグ情報を mysqlbug スクリプトを使用 して投稿すべきです。 Windows 上で実行している場合は、OS と MySQL バージョンの記述を含めてください。できれば、投稿前に MySQL Server の最新の安定バージョンか開発バージョンを使用して問題をテ ストしてください。含められたテストケース上で、``mysql test < script'' を使 用することで、または、バグレポートに含められたシェル/Perlスクリプトを実 行することで、誰もがバグを再現できるようにすべきです。この bugs リストに投稿された全て のバグは、次の MySQL リリースで修正されるかドキュメント化されま す。 小さなコードの変更だけですめば、私たちはこの問題を修正するパッチの投 稿も行います。

多すぎる情報を含むメッセージに答えることはできますが、少なすぎる情報を含 むものにはできないということを覚えていてください。しばしば人は事実を省い てしまいます。問題の原因をわかっていると思い、いくつかの細かいことを重大でない と見なしてしまうからです。良い原則は: 何かを言おうか迷ったときには、言っ てください。最初にあなたが十分な情報を含めなかったために、再び質問して 回答を待つことを強いられるより、数行をあなたのレポートに書く方が千倍速く て、迷惑ではありません。

良くある間違いは、使用している MySQL 配布のバージョン番号を示さ ない、または MySQL server をインストールしたプラットフォームを(プラッ トフォームのバージョン番号を含めて)示さないことです。これはとても関連した 情報で、100 のバグレポートのうち 99 の場合、この情報がないと役に立ちませ ん。私たちは ``何故私では動作しないの?'' のような質問をとても良く受けま す。そして私たちは、要求された機能はその MySQL バージョンに実装さ れていない、または、レポート中に述べられているバグは新しい MySQL バージョンで既に修正されているであることを見つけます。ときどき、 エラーはプラットフォーム依存で、オペレーティングシステムとプラットフォー ムのバージョン番号を知らないことには、何も修正することはできません。

問題に関連している場合は、コンパイラについての情報も与えることを忘れない でください。しばしば人はコンパイラのバグを見つけて、問題は MySQL に関連していると考えます。多くのコンパイラはいつも開発中 で、バージョンを上げることによってより良いバージョンになります。問題がコ ンパイラに依存しているかどうかを確定するには、どのコンパイラが使用されて いるかを知ることが必要です。全てのコンパイルの問題はバグレポートとみなさ れ、それに従って報告されるべきであることに注意してください。

最も役に立つのは、問題の良い説明がバグレポートに含められることです。つま り、問題に導かれる全ての行ったことの例と、正確に記述された問題それ自身 です。良いバグレポートは、バグや問題を再現する方法を示す完全な例を含むも のです。 「E.1.6 Making a Test Case When You Experience Table Corruption」節参照.

問題がエラーメッセージを与える場合、それをレポートに含めることはとても重 要です。私たちがプログラムを使用するアーカイブから何かを検索しようとする 場合、エラーメッセージはプログラムが与えたものと正確に一致する方が良いで す(大文字小文字でさえも残されるべきです)。どのようなエラーメッセージだったか を覚えるなんてことはしてはいけません;レポートに完全なメッセージをコピー して貼りつけてください。

MyODBC での問題がある場合、MyODBC トレースファイルの生成を試みるべきです。 「8.3.7 Reporting Problems with MyODBC」節参照.

あなたのレポートを読む多くの人が 80桁ディスプレイを使用しているというこ とを覚えておいて下さい。mysql コマンドラインツールを使用 してレポートまたはサンプルを生成するとき、そのようなディスプレイの有効幅を 超える出力(例えば、EXPLAIN SELECT 文; 後述のサンプル を見てください)には、--vertical オプション(または \G ステー トメント終端)を使用してください。

次の情報をレポートに含めてください:

もしあなたがサポート顧客なら、より高い優先度で取り扱われるように、バグレポー トを mysql-support@mysql.com と、そして同様に、他の誰かが問題を経 験済み(そして、もしかしたら解決済み)かどうかを調べるために、適切なメーリン グリストにもクロスポストしてください。

MyODBC のバグ報告上の情報については、 「8.3.4 MyODBC での問題をどのように報告すべきか?」節 を参照 してください。

いくつかの一般的な問題の解決法のために 「A Problems and Common Errors」節 を参照してください。

回答があなたに個人的に送られて、メーリングリストに送られていないときは、 あなたの問題の解決の手助けになった返事の恩恵を他の人にも与える ために、回答を要約し、その要約をメーリングリストに送信することが、良いエチケットです。

1.6.1.4 メーリングリストで質問に答えるためのガイドライン

あなたの回答が広く関心を持たれると考えられる場合、尋ねた人に個人的に直接 返事をする代わりに、メーリングリストに投稿したいと思うでしょう。元 の投稿者以外の人もそれから恩恵を受けられるように、十分に一般的な回答を作成 することを試みてください。メーリングリストに投稿する場合は、あなたの回答 が以前の回答と重複していないか確認して下さい。

あなた返事の中で、質問の本質部分の要約を試みてください。質問全体を引用す ることを義務と感じないで下さい。

HTML モードを ON にしたブラウザからメールメッセージを投稿しないでくださ い。多くのユーザはブラウザでメールを読んでいません。

1.6.2 IRC (Internet Relay Chat) での MySQL コミュニティの支援

いろいろなMySQLのメーリングリストに加え、IRC(Internet Relay Chat) に経験を積んだコミュニティの人がいます。次は、わたしたちが知っている、 現在のよい networks/channels です:

IRCネットワークに接続するIRCクライアントソフトウェアを探して いるならば、X-Chat(http://www.xchat.org/)を見て ください。X-Chatは、Unixだけではなく、Windowsのプラットフォー ムでも使えます。

1.7 MySQL はどのように標準互換か?

この章では、MySQL がどのように ANSI SQL 標準に関係するかを説明し ます。MySQL Server は ANSI SQL 標準に対して多くの拡張を持ちます。そして、 ここでそれらが何か、またそれらの使用方法を見つけられるでしょう。また、 MySQL Server に足りない機能についての情報と、いくつかの違いを回避する方 法も見つけられるでしょう。

わたしたちの目標は、どのように使ってもMySQL Serverの使いやすさを、正当な 理由なしで制限しないことです。可能性のあるすべての使い方に対する開発のリ ソースをもっていなくても、わたしたちは、新しい領域でMySQL Serverを使おう としている人たちに助けと提案を求めます。

製品へのわたしたちのひとつの主な目標は、速度と信頼性を犠牲にしないで、ANSI 99適合性に向かって進み続けることです。ユーザの多くにとってMySQL Serverの 使いやすさが大きく増すときには、SQLに拡張を加えたり、SQLにない機能を追加 したりすることを恐れません。(MySQL Server 4.0の新しいHANDLERインタ フェースはこの戦略の例です。 「6.4.2 HANDLER Syntax」節参照.)

激しいウェブ/ログの使い方とミッションクリティカルな24/7(訳注:24時間/日、 7日/週のことと考えられる)の使い方の両方を満 たすために、トランザクションと非トランザクションデータベースをサポートし 続けます。

MySQL Serverは、小さなコンピュータシステムで、中規模なデータベース(1千万件 から1億件のレコード、またはひとつのテーブルあたり100Mバイト)で動作するとこ ろから設計し始めました。わたしたちはMySQL Serverがテラバイトのデータベース でも動作するように拡張し続けます。それと同じように、ハンドヘルド機器や組み 込み用途により適するように切りつめたMySQLバージョンをコンパイルできるように しています。MySQLサーバは設計が簡潔であるため、ソースツリーで競合しないでこ の両方の方向を採ることができます。

いまは、リアルタイムのサポートやクラスタ化されたデータベースのサポートを(レプ リケーションサービスで多くのことがすでにできていても)目標に置いていません。

ネイティブにXMLをサポートする必要はないと信じていますが、代わりにクライア ント側でXMLをサポートするようにわたしたちからユーザにお願いしようとしていま す。クライアント側で複雑さを取り扱うライブラリを開発するより、メインのサーバ のコードをできるかぎり「細身できれいに」しておくほうがよいと考えます。これが 前に述べた、サーバで速度と信頼性を犠牲にしない戦略の一部です。

1.7.1 どの標準に MySQL はしたがうか?

エントリレベルではSQL92です。ODBCのレベルは0-3.51です。

ANSI SQL 99標準の全機能が使えるのが目標ですが、コードの速 度と品質には妥協しません。

1.7.2 MySQLをANSIモードで実行する

mysqld-ansiオプションをつけて起動すると、 MySQL Serverは次のように振る舞います:

サーバをANSIモードで実行することは、次のオプションで開始することと同じです。 --sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES, IGNORE_SPACE,SERIALIZE,ONLY_FULL_GROUP_BY.

1.7.3 MySQL の ANSI SQL92 に対する拡張

MySQL Server は、他の SQL データベース内に見られないであろう、いくつか の拡張を含んでいます。それらを使用すると、コードは他の SQL サー バに移行できなくなるので注意してください。いくつかのケースでは、形式 /*! ... */ のコメントを使用することで、MySQL 拡張を含む 移行可能コードを書くことができます。この場合、MySQL Server はコメント 内のコードを実行しますが、ほかのSQLサーバはこれを無視します。例えば:

SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...

'!' の後ろにバージョン番号を追加すると、文法は MySQL バー ジョンが使用されるバージョン番号と等しいか大きい場合にのみ実行されます:

CREATE /*!32302 TEMPORARY */ TABLE t (a int);

上記は バージョン 3.23.02 かそれ以上の場合という意味で、そのとき MySQL Server は TEMPORARY キーワードを使用します。

MySQL 拡張を以下に示します:

1.7.4 MySQL と ANSI SQL92 との違い

私たちは MySQL Server を ANSI SQL 標準と ODBC SQL 標準にしたがうように しようとしていますが、いくつかの場合、MySQL Server には違いがあります:

次の機能が MySQL Server の現在のバージョンにはありません。新しい拡張の 優先度については、次を参考にしてください http://www.mysql.com/doc/en/TODO.html. これはこのマニュアル中の TODO リストの最新バージョンです。 「1.8 MySQL and The Future (The TODO)」節参照.

1.7.4.1 副問合せ

バージョン 4.0 までの MySQL Server は、 INSERT ... SELECT ...REPLACE ... SELECT ...の形式だけで 入れ子のクエリが使えます。しかし、ほかのところでもIN()が 使えます。副問合せは、4.1 の開発のツリーで実装中です。副問合せは、 4.1 の開発のツリーで開発されました。

しかし多くの場合、副問合せを使わないクエリに書き直せます:

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

これは、次のように書き直せます:

SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;

問合せ:

SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2
                                       WHERE table1.id=table2.id);

これは、次のように書き直せます:

SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
                                       WHERE table2.id IS NULL;

さらに複雑な副問合せでは、副問合せを保持するために一時テーブルを作成で きます。しかし、この方法が使えない場合があります。この場合には、 DELETE 文でもっとも頻繁に遭遇します。DELETE 文 では、標準 SQL では(sub select の中を除いて)join が使え ません。副問合せが MySQL Server で使えるようになるまで、この状況には2 つの選択肢があります。

最初の選択肢は、手続きプログラミング言語(Perl や PHP のような)を使用して、 SELECT クエリを発行して削除されるレコードのプライマリキーを獲得し、 それから DELETE 文(DELETE FROM ... WHERE ... IN (key1, key2, ...))を組み立てるためにその値を使用することです。

二番目の選択肢は、対話型 SQL を使用し、DELETE 文の集まり を、(標準 || オペレータの代わりに)MySQL 拡張 CONCAT() を使用して、自動的に組み立てることです。例えば:

SELECT CONCAT('DELETE FROM tab1 WHERE pkid = ', "'", tab1.pkid, "'", ';')
  FROM tab1, tab2
 WHERE tab1.col1 = tab2.col2;

このクエリをスクリプトファイル中に置き、入力を mysql コマンドライン インタプリタに切替え、その出力を二番目のインタプリタインスタンスにパイプし ます:

shell> mysql --skip-column-names mydb < myscript.sql | mysql mydb

MySQL Server 4.0 は複数のテーブルを削除できます。これで、ひとつの 表から多くの表であっても、情報に基づいて同時に行を削除できます。

1.7.4.2 SELECT INTO TABLE

MySQL Server は、まだ、Oracle の SQL 拡張: SELECT ... INTO TABLE ...がありません。 代わりに、MySQL Server は、ANSI SQL 構文の INSERT INTO ... SELECT ...が使え、 基本的に同じことができます。

6.4.3.1 INSERT ... SELECT 構文」節参照.

INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.fldOrder_ID
       FROM tblTemp1 WHERE tblTemp1.fldOrder_ID > 100;

代わりに、SELECT INTO OUTFILE...CREATE TABLE ... SELECTが使えます。

1.7.4.3 トランザクションと原子的な操作

MySQL Server では、InnoDBBDBTransactional table handlersで、トランザクションが使えます。 「7 MySQL テーブル型」節参照。 InnoDBACID 適合にします。

しかし、MyISMといったMySQL Server のトランザクションでないテーブ ル種は、``Atomic Operations''(アトミック・オペレーション)と呼ばれ る、データ一貫性のほかの方式にしたがいます。 アトミック・オペレーション が同等かあるいはより良いパフォーマンスを提供するというのが、私たちの経験、 および考えです。MySQL Server では両方の方式があるため、ユーザは、アプリ ケーションで、アトミック・オペレーションの速度が必要か、トランザクション 機能が必要か、決定できます。この選択は、テーブルごとにできます。

厳密に完全性を維持するには、MySQL Server の機能をどのように使用するので しょう? そして、トランザクションの方式でこれらの機能をどのように比較す るのでしょう?

  1. トランザクションの方式では、もし、あなたのアプリケーションがきわどい状況 でCOMMIT の代わりに ROLLBACK の呼び出しに依存しているなら、 トランザクションはより便利でしょう。おまけに、トランザクションは、完了で きなかった更新や不整合を起こしたデータが、確実にデータベースに登録されな いようにできます。そのサーバには、自動的な rollback をする機会が与えられ、 あなたのデータは守られるでしょう。MySQL Server では、ほとんどの場合、更 新前の簡単なチェックを含ませたり、データベースの矛盾を検査して自動的に修 復したり、警告の表示を行ったりする簡単なスクリプトを実行したりすることで、 発生しうる問題を解決できます。MySQL ログを使ったり外部へログを追加したり することで、通常、データに不整合を起こさないで、テーブルを完全に修復でき ることに注意してください。
  2. しばしば、トランザクション的に欠陥のあるな更新は、原子的(アトミック)にな るように書き換えることができます。一般的に、トランザクションが解決するす べての一貫性の問題は、データベースが自動的にアボートしないことを保証する ことで、LOCK TABLE、または、原子的な更新で解決できます。これは、 トランザクション的なデータベースに共通の問題です。
  3. もしサーバがダウンすれば、たとえトランザクション的なシステムでもデータを 失います。異なるシステムが存在する違いは、単に、データを失ってもよい時間 幅がどれだけ小さいかにあります。100% 安全なシステムはなく、単に``十分に 安全''があるだけです。最高に安全なトランザクションデータベースと名声の高 いOracleでさえ、そのようなときには、ときどき、データを失います。 MySQL Server を安全にするには、バックアップを取ることと、更新ログを有効 にすることだけです。これで、あなたが他のトランザクションを持つデータベー スで行っているようないかなる場面での修復が可能です。もちろん、バックアッ プをとることは、どのデータベースを使用しているかに関わらず、常に良いこと です。@end enumerate トランザクションの方法は、長所と短所があります。多くのユーザとアプリケー ション開発者は、楽に、アボートが発生したときの問題に関してコードを書ける か、または書く必要があるかに依存します。しかし、原子的な操作の方式が初め てであっても、よりトランザクションに慣れていても、トランザクションを使わ ないテーブルが、高度に調整されたトランザクションテーブルに対して、最高 3 倍から 5 倍速いという長所 一貫性がいちばん重要な状況では、MySQL Server は、トランザクション水準を、 またはトランザクションを使わないテーブルでも高い信頼性と一貫性を提供します。 LOCK TABLEでテーブルをロックすると、一貫性の確認が済むまで、すべ ての更新は待たされます。(書き込みロックと対称に)読み出しロックだけを取得 するときは読み出しと挿入は、まだ、許されます。新しく挿入されたレコードは、 読み込みロックをもったクライアントからは、読み込みロックを解放するまで見 えません。INSERT DELAYED を使うと、挿入をローカルにある待ち行列に、 ロックを解放するまで、挿入が完了するまでクライアントを待たせることなく、 積むことができまます。 「6.4.4 INSERT DELAYED 構文」節参照. ここでいう``Atomic''(原子性)は、魔法ではありません。ある特定の更新が実行 している間は、ほかのユーザは阻まれることを確実にすることを意味し、自動的 なロールバック(あまり注意を払わないときにトランザクション的なテーブルで 起きえる)が起きえないことだけです。また MySQL Server は、汚染された読み 込みが起きないことを保証します。 次は、トランザクションでないテーブルでのいくつかのテクニックです。

    1.7.4.4 ストアドプロシジャとトリガ

    ストアドプロシジャは、サーバ内でコンパイルでき格納できる SQL コマンドの 集まりです。一度これが行われると、クライアントはクエリ全体の再発行を保 持する必要がなく、ストアドプロシジャを参照できます。これはさらにより速い速度を提 供します。クエリは一度だけ解釈され、より少ないデータがサーバとクライアン ト間で送信されるからです。サーバ内に関数ライブラリを持つことによりレ ベルを上げることもできます。

    トリガは特別なイベントが発生したときに呼び出されるストアドプロシジャです。 例えば、トランザクションテーブルからレコードが削除されるたびにトリガされ、 それに対応する顧客を顧客テーブルから自動的に削除するという、 ストアドプロシジャをインストールすることができます。

    The planned update language will be able to handle stored procedures. Our aim is to have stored procedures implemented in MySQL Server around version 5.0. We are also looking at triggers.

    1.7.4.5 外部キー

    注意: SQL の外部キーはテーブルを結合するためには使用できませんが、指示の 完全性の検査のために良く使用されます(foreign key constraints)。 SELECT 文で複数 テーブルから結果を得たい場合、テーブルの結合によってこれを行います:

    SELECT * FROM table1,table2 WHERE table1.id = table2.id;
    

    6.4.1.1 JOIN 構文」節参照. 「3.5.6 Using Foreign Keys」節参照.

    In MySQL Server 3.23.44 and up, InnoDB tables support checking of foreign key constraints. 「7.5 InnoDB テーブル (3.23.6以上)」節参照. For other table types, MySQL Server does parse the FOREIGN KEY syntax in CREATE TABLE commands, but without further action being taken.

    MySQL 内での FOREIGN KEY 構文は、他の SQL ベンダの CREATE TABLE コマンドとの互換のためだけに存在します; これは何も行 ないません。ON DELETE ... がない FOREIGN KEY 構文は、目的 の作成のために主に使われます。いくつかの ODBC アプリケーションは、自動的 に WHERE 節を提供するために、これを使用しますが、しかしこれは通常 簡単に無効にできます。FOREIGN KEY はときどき強制チェックとして使用さ れます。しかし、テーブルに正しい順で行が挿入される場合、このチェックは実 際には不要です。いくつかのアプリケーションがそれが存在することを要求する ため MySQL はこれらの節だけをサポートします(それが動作するかど うかに関わらず)。

    MySQL Server では、外部キーを持つテーブルからレコードを削除するときに適 切な DELETE 文をアプリケーションに追加することで、 ON DELETE ... が実装されていないという問題を回避できます。実際に は、これは速く(いくつかの場合はより速く)そして外部キーの使用よりもさらに 可搬性があります。

    In MySQL Server 4.0 you can use multi-table delete to delete rows from many tables with one command. 「6.4.6 DELETE 構文」節参照.

    In the near future we will extend the FOREIGN KEY implementation so that the information will be saved in the table specification file and may be retrieved by mysqldump and ODBC. At a later stage we will implement the foreign key constraints for applications that can't easily be coded to avoid them.

    Do keep in mind that foreign keys are often misused, which can cause severe problems. Even when used properly, it is not a magic solution for the referential integrity problem, although it does make things easier in some cases.

    Some advantages of foreign key enforcement:

    Disadvantages:

    1.7.4.6 ビュー

    It is planned to implement views in MySQL Server around version 5.0.

    Views are mostly useful for letting users access a set of relations as one table (in read-only mode). Many SQL databases don't allow one to update any rows in a view, but you have to do the updates in the separate tables.

    As MySQL Server is mostly used in applications and on web systems where the application writer has full control on the database usage, most of our users haven't regarded views to be very important. (At least no one has been interested enough in this to be prepared to finance the implementation of views.)

    One doesn't need views in MySQL Server to restrict access to columns, as MySQL Server has a very sophisticated privilege system. 「4.2 General Security Issues and the MySQL Access Privilege System」節参照.

    1.7.4.7 コメント開始としての `--'

    他のいくつかの SQL データベースは、`--' をコメントの開始のために使 用します。MySQL Server は `#' をコメント開始文字とします。 mysql コマンドラインツールが `--' で始まる全ての行を削除した としてもです。MySQL では C コメントスタイル /* これはコメ ント */ も使用できます。 「6.1.6 コメント 構文」節参照。

    MySQL Server バージョン 3.23.3 以上は `--' をサポートしません; この退化したコメントスタイルは、次のコードのように !payment! の payment の値を自動的に挿入するような何かを使用して自動的に生成される SQL クエリで多くの問題を引き起こすためです:

    UPDATE tbl_name SET credit=credit-!payment!
    

    payment の値が負の場合に何が起きると思いますか? 1--1 は正しい SQL なので、私たちは `--' をコメント開始と見なす ことはひどいことだと思います。

    しかし MySQL Server バージョン 3.23 では次を使用できます: 1-- これはコメント

    以降の説明では、バージョン 3.23 よりも前の MySQL を実行している場 合だけが対象です:

    テキストファイルの SQL プログラムが `--' コメントを含んでいる場合、 次を使用すべきです:

    shell> replace " --" " #" < text-file-with-funny-comments.sql \
             | mysql database
    

    通常の次の代わりに:

    shell> mysql database < text-file-with-funny-comments.sql
    

    次の方法でも、コマンドファイル中の `--' コメントを `#' コメン トに変更できます:

    shell> replace " --" " #" -- text-file-with-funny-comments.sql
    

    それらは次のコマンドで戻してください:

    shell> replace " #" " --" -- text-file-with-funny-comments.sql
    

    1.7.5 MySQLでの既知のエラーと欠けているデザイン

    1.7.5.1 新しいバージョンで修正されたバージョン3.23におけるエラー

    バージョン3.23でのエラーが、新しいバージョンで修正されました。 次のようなエラー・バグは、MySQL 3.23 では、修正されていませんでした。というのは、そうしたバグやエラーを直すことは、たくさんのコードの改変を伴うだろうからです。そしてこうした改変は、もっとひどい他のバグを生みかねません。そういうバグはまた、'not fatal'とか'bearable'にクラス分けされます。

    1.7.5.2 MySQL での既知のエラーと欠けているデザイン

    次のような問題は、既知の問題で、優先的に処理されるべき問題です。

    次の問題は、既知の問題ですが、期限内に解決されることでしょう。

    以下のものが、MySQLの以前のバージョンにおいて知られていたバグです。:

    プラットホームに特有のバグについては、コンパイリングとポーティングについての節を参照してください。

    1.8 MySQL and The Future (The TODO)

    This section lists the features that we plan to implement in MySQL Server.

    もしあなたが優先順位に影響を及ぼしたければ、どうかライセンスかサポート登録して、 私たちにあなたがより速く欲しいものを言ってください。 「1.4 MySQL ライセンスとサポート」節参照.

    The plan is that we in the future will support the full ANSI SQL99 standard, but with a lot of useful extensions. The challenge is to do this without sacrificing the speed or compromising the code.

    1.8.1 Things That Should be in 4.0

    All done. We now only do bug fixes for MySQL 4.0. 「D.3 Changes in release 4.0.x (Gamma)」節参照. Development has shifted to 4.1 & 5.0

    1.8.2 Things That Should be in 4.1

    The following features are planned for inclusion into MySQL 4.1. For a list what is already done in MySQL 4.1, see 「D.2 Changes in release 4.1.x (Alpha)」節参照.

    1.8.3 Things That Should be in 5.0

    The following features are planned for inclusion into MySQL 5.0. Note that because we have many developers that are working on different projects, there will also be many additional features. There is also a small chance that some of these features will be added to MySQL 4.1. For a list what is already done in MySQL 4.1, see 「D.2 Changes in release 4.1.x (Alpha)」節参照.

    1.8.4 近い将来に完了せねばならないもの

    1.8.5 いつかは行うべきもの

    Time is given according to amount of work, not real time.

    1.8.6 行う予定のない物

    1.9 MySQL と他のオープンソースデータベースの比較

    Our users have successfully run their own benchmarks against a number of Open Source and traditional database servers. We are aware of tests against Oracle server, DB/2 server, Microsoft SQL Server, and other commercial products. Due to legal reasons we are restricted from publishing some of those benchmarks in our reference manual.

    This section includes a comparison with mSQL for historical reasons and with PostgreSQL as it is also an Open Source database. If you have benchmark results that we can publish, please contact us at benchmarks@mysql.com.

    For comparative lists of all supported functions and types as well as measured operational limits of many different database systems, see the crash-me web page at http://www.mysql.com/information/crash-me.php.

    1.9.1 How MySQL Compares to mSQL

    Performance
    真の速度比較のためは、増加する MySQL ベンチマークスイートを見て下さい 「5.1.4 The MySQL Benchmark Suite」節参照. Because there is no thread creation overhead, a small parser, few features, and simple security, mSQL should be quicker at:
    • Tests that perform repeated connects and disconnects, running a very simple query during each connection.
    • INSERT operations into very simple tables with few columns and keys.
    • CREATE TABLE and DROP TABLE.
    • SELECT on something that isn't an index. (A table scan is very easy.)
    これらのオペレーションはとても単純なので、開始のオーバーヘッドが高くなる ときにそれらを良くするのは難しいです。接続が確立された後は MySQL はとても良い性能になります。 MySQL Server は mSQL や多くの他の SQL 実装よりとても速いです:
    • Complex SELECT operations.
    • 大きな結果を検索する場合。(MySQL はより良く, より速くそしてより安全 なプロトコルを持ちます)
    • 可変長文字列を持つテーブル。MySQL はさらに効率的な処理を持ち、 VARCHAR 上にインデックスを持つことができます。
    • Handling tables with many columns.
    • Handling tables with large record lengths.
    • SELECT with many expressions.
    • SELECT on large tables.
    • 同時に多くの接続を処理します。MySQL は完全なマルチスレッドです。 各接続はそれ自身のスレッドを持ちます。これは、それらが他を待つ必要がない ことを意味します(同じテーブルを変更するクエリが実行される場合を除く)。 mSQL では、全ての他の接続は、最初のもの - クエリが長いか短いかに 関わらず - が実行され、終わるまで待つ必要があります。その後次の接続が与 えられ、他の全ては再び待ちます。
    • Joins. mSQL can become pathologically slow if you change the order of tables in a SELECT. In the benchmark suite, a time more than 15,000 times slower than MySQL Server was seen. This is due to mSQL's lack of a join optimiser to order tables in the optimal order. However, if you put the tables in exactly the right order in mSQL2 and the WHERE is simple and uses index columns, the join will be relatively fast! 「5.1.4 The MySQL Benchmark Suite」節参照.
    • ORDER BY and GROUP BY.
    • DISTINCT.
    • TEXT または BLOB フィールドの使用。
    SQL Features
    • GROUP BY and HAVING. mSQL does not support GROUP BY at all. MySQL Server supports a full GROUP BY with both HAVING and the following functions: COUNT(), AVG(), MIN(), MAX(), SUM(), and STD(). COUNT(*) is optimised to return very quickly if the SELECT retrieves from one table, no other columns are retrieved, and there is no WHERE clause. MIN() and MAX() may take string arguments.
    • INSERT and UPDATE with calculations. MySQL Server can do calculations in an INSERT or UPDATE. For example:
      mysql> UPDATE SET x=x*10+y WHERE x<20;
      
    • Aliasing. MySQL Server has column aliasing.
    • Qualifying column names. In MySQL Server, if a column name is unique among the tables used in a query, you do not have to use the full qualifier.
    • SELECT with functions. MySQL Server has many functions (too many to list here; see 「6.3 SELECTWHERE 節で使用する関数」節).
    Disk Space Efficiency
    これは、テーブルをどのように小さくできるかです。 MySQL はとても精密な型を持ちます。とても小さい領域を使用するテーブルを作成でき るためです。MySQL データ型の有用な例は、3バイト長の MEDIUMINT です。10,000,000 レコードを持つ場合、1レコードあたり1バイトの節約でもと ても重要です。 mSQL2 は4つの型(char,text,int,real)しかないので、小さなテーブルを 得るのは難しいです。
    Stability
    これを客観的に判断するのは難しいです。MySQL の安定性については 「1.2.3 MySQL はどれくらい安定か?」節 を参照してください。 私たちには mSQL 安定性の経験がありません。そのため、私たちはこれにつ いては何も言えません。
    Price
    もう一つの重要な問題はもちろんライセンスです。MySQL は mSQL よりも柔軟なライセンスを持っています。そして mSQL よ りもより安いです。少なくとも、あなたが使用を選択した製品全てに、ライセン スまたは email サポートへの支払いを考慮することを覚えていて下さい。 MySQL を含めた製品を売る場合、もちろんこのライセンスの獲得が要求 されます。
    Perl Interfaces
    MySQL は基本的に mSQL と同じ perl インタフェースと、いくつかの追 加機能を持ちます。
    JDBC (Java)
    MySQL Server currently has a lot of different JDBC drivers:
    • MySQL Connector/J is a native Java driver. Version 3.x is released under dual licensing (GPL and commercial).
    • The Resin driver: this is a commercial JDBC driver released under open source. http://www.caucho.com/projects/jdbc-mysql/index.xtp
    • The gwe driver: a Java interface by GWE technologies (not supported anymore).
    • The jms driver: an improved gwe driver by Xiaokun Kelvin ZHU X.Zhu@brad.ac.uk (not supported anymore).
    • The twz driver: a type 4 JDBC driver by Terrence W. Zellers zellert@voicenet.com. This is commercial but is free for private and educational use (not supported anymore).
    The recommended driver is the mm driver. The Resin driver may also be good (at least the benchmarks look good), but we haven't received that much information about this yet. We know that mSQL has a JDBC driver, but we have too little experience with it to compare.
    開発の速度
    MySQL はとても小さい開発チームを持っていますが、私たちは C と C++ のコーディ ングをとても速く行います。スレッド、関数、 GROUP BY などはまだ mSQL には実装されていませんので、追いつくにはたくさんのことをしなければなりません。 この上でいくつかの見通しを得るために、去年の mSQL `HISTORY' ファ イルを見て、MySQL Reference Manual News 節と比較できます( 「D MySQL Change History」節)。 速く開発された多くのものが、かなり明白になります。
    ユーティリティプログラム
    mSQL と MySQL は多くの興味深いサードパーティツールを持っ ています。上位への移行 (mSQL -> MySQL) はとても簡単です。 MySQL は、ほとんど全ての興味深い mSQL アプリケーションを 持っています。 MySQL には、簡単な msql2mysql プログラムが用意されています。 これは、mSQL と MySQL の C API 関数のスペルの違いを修正するプログラムです。 たとえば、mysqlConnect()のインスタンスを変えるには、 mysql_connect(). mSQL から MySQL への変換は通常、数分使用するだけです。

    1.9.1.1 How to Convert mSQL Tools for MySQL

    According to our experience, it doesn't take long to convert tools such as msql-tcl and msqljava that use the mSQL C API so that they work with the MySQL C API.

    The conversion procedure is:

    1. シェルスクリプト msql2mysql をソースに実行します。バイナリプログラム replace が必要です。これは MySQL で配布されます。
    2. コンパイル。
    3. 全てのコンパイラエラーを修復します。

    MySQL と mSQL 間の C API の違い:

    1.9.1.2 How mSQL and MySQL Client/Server Communications Protocols Differ

    There are enough differences that it is impossible (or at least not easy) to support both.

    The most significant ways in which the MySQL protocol differs from the mSQL protocol are listed here:

    1.9.1.3 How mSQL 2.0 SQL Syntax Differs from MySQL

    Column types

    MySQL Server
    Has the following additional types (among others; 「6.5.3 CREATE TABLE 構文」節):
    • ENUM type for one of a set of strings.
    • SET type for many of a set of strings.
    • BIGINT type for 64-bit integers.
    MySQL Server also supports the following additional type attributes:
    • UNSIGNED option for integer and floating-point columns.
    • ZEROFILL option for integer columns.
    • AUTO_INCREMENT option for integer columns that are a PRIMARY KEY. 「8.4.3.130 mysql_insert_id()」節参照.
    • DEFAULT value for all columns.
    mSQL2
    mSQL column types correspond to the MySQL types shown in the following table:
    mSQL type Corresponding MySQL type
    CHAR(len) CHAR(len)
    TEXT(len) TEXT(len). len is the maximal length. And LIKE works.
    INT INT. With many more options!
    REAL REAL. Or FLOAT. Both 4- and 8-byte versions are available.
    UINT INT UNSIGNED
    DATE DATE. Uses ANSI SQL format rather than mSQL's own format.
    TIME TIME
    MONEY DECIMAL(12,2). A fixed-point value with two decimals.

    Index Creation

    MySQL Server
    Indexes may be specified at table creation time with the CREATE TABLE statement.
    mSQL
    Indexes must be created after the table has been created, with separate CREATE INDEX statements.

    To Insert a Unique Identifier into a Table

    MySQL Server
    Use AUTO_INCREMENT as a column type specifier. 「8.4.3.130 mysql_insert_id()」節参照.
    mSQL
    Create a SEQUENCE on a table and select the _seq column.

    To Obtain a Unique Identifier for a Row

    MySQL Server
    Add a PRIMARY KEY or UNIQUE key to the table and use this. New in Version 3.23.11: If the PRIMARY or UNIQUE key consists of only one column and this is of type integer, one can also refer to it as _rowid.
    mSQL
    Use the _rowid column. Observe that _rowid may change over time depending on many factors.

    To Get the Time a Column Was Last Modified

    MySQL Server
    Add a TIMESTAMP column to the table. This column is automatically set to the current date and time for INSERT or UPDATE statements if you don't give the column a value or if you give it a NULL value.
    mSQL
    Use the _timestamp column.

    NULL Value Comparisons

    MySQL Server
    MySQL Server follows ANSI SQL, and a comparison with NULL is always NULL.
    mSQL
    In mSQL, NULL = NULL is TRUE. You must change =NULL to IS NULL and <>NULL to IS NOT NULL when porting old code from mSQL to MySQL Server.

    String Comparisons

    MySQL Server
    Normally, string comparisons are performed in case-independent fashion with the sort order determined by the current character set (ISO-8859-1 Latin1 by default). If you don't like this, declare your columns with the BINARY attribute, which causes comparisons to be done according to the ASCII order used on the MySQL server host.
    mSQL
    All string comparisons are performed in case-sensitive fashion with sorting in ASCII order.

    Case-insensitive Searching

    MySQL Server
    LIKE is a case-insensitive or case-sensitive operator, depending on the columns involved. If possible, MySQL uses indexes if the LIKE argument doesn't start with a wildcard character.
    mSQL
    Use CLIKE.

    Handling of Trailing Spaces

    MySQL Server
    Strips all spaces at the end of CHAR and VARCHAR columns. Use a TEXT column if this behaviour is not desired.
    mSQL
    Retains trailing space.

    WHERE Clauses

    MySQL Server
    MySQL correctly prioritises everything (AND is evaluated before OR). To get mSQL behaviour in MySQL Server, use parentheses (as shown in an example later in this section).
    mSQL
    Evaluates everything from left to right. This means that some logical calculations with more than three arguments cannot be expressed in any way. It also means you must change some queries when you upgrade to MySQL Server. You do this easily by adding parentheses. Suppose you have the following mSQL query:
    mysql> SELECT * FROM table WHERE a=1 AND b=2 OR a=3 AND b=4;
    
    To make MySQL Server evaluate this the way that mSQL would, you must add parentheses:
    mysql> SELECT * FROM table WHERE (a=1 AND (b=2 OR (a=3 AND (b=4))));
    

    Access Control

    MySQL Server
    Has tables to store grant (permission) options per user, host, and database. 「4.2.6 特権システムはどのように動くか?」節参照.
    mSQL
    Has a file `mSQL.acl' in which you can grant read/write privileges for users.

    1.9.2 How MySQL Compares to PostgreSQL

    When reading the following, please note that both products are continually evolving. We at MySQL AB and the PostgreSQL developers are both working on making our respective databases as good as possible, so we are both a serious alternative to any commercial database.

    The following comparison is made by us at MySQL AB. We have tried to be as accurate and fair as possible, but although we know MySQL Server thoroughly, we don't have a full knowledge of all PostgreSQL features, so we may have got some things wrong. We will, however, correct these when they come to our attention.

    We would first like to note that PostgreSQL and MySQL Server are both widely used products, but with different design goals, even if we are both striving toward ANSI SQL compliancy. This means that for some applications MySQL Server is more suited, while for others PostgreSQL is more suited. When choosing which database to use, you should first check if the database's feature set satisfies your application. If you need raw speed, MySQL Server is probably your best choice. If you need some of the extra features that only PostgreSQL can offer, you should use PostgreSQL.

    1.9.2.1 MySQL and PostgreSQL development strategies

    When adding things to MySQL Server we take pride to do an optimal, definite solution. The code should be so good that we shouldn't have any need to change it in the foreseeable future. We also do not like to sacrifice speed for features but instead will do our utmost to find a solution that will give maximal throughput. This means that development will take a little longer, but the end result will be well worth this. This kind of development is only possible because all server code are checked by one of a few (currently two) persons before it's included in the MySQL server.

    We at MySQL AB believe in frequent releases to be able to push out new features quickly to our users. Because of this we do a new small release about every three weeks, and a major branch every year. All releases are thoroughly tested with our testing tools on a lot of different platforms.

    PostgreSQL is based on a kernel with lots of contributors. In this setup it makes sense to prioritise adding a lot of new features, instead of implementing them optimally, because one can always optimise things later if there arises a need for this.

    Another big difference between MySQL Server and PostgreSQL is that nearly all of the code in the MySQL server is coded by developers that are employed by MySQL AB and are still working on the server code. The exceptions are the transaction engines and the regexp library.

    This is in sharp contrast to the PostgreSQL code, the majority of which is coded by a big group of people with different backgrounds. It was only recently that the PostgreSQL developers announced that their current developer group had finally had time to take a look at all the code in the current PostgreSQL release.

    Both of the aforementioned development methods have their own merits and drawbacks. We here at MySQL AB think, of course, that our model is better because our model gives better code consistency, more optimal and reusable code, and in our opinion, fewer bugs. Because we are the authors of the MySQL server code, we are better able to coordinate new features and releases.

    1.9.2.2 Featurewise Comparison of MySQL and PostgreSQL

    On the crash-me page (http://www.mysql.com/information/crash-me.php) you can find a list of those database constructs and limits that one can detect automatically with a program. Note, however, that a lot of the numerical limits may be changed with startup options for their respective databases. This web page is, however, extremely useful when you want to ensure that your applications work with many different databases or when you want to convert your application from one database to another.

    MySQL Server offers the following advantages over PostgreSQL:

    Drawbacks with MySQL Server compared to PostgreSQL:

    PostgreSQL currently offers the following advantages over MySQL Server:

    Note that because we know the MySQL road map, we have included in the following table the version when MySQL Server should support this feature. Unfortunately we couldn't do this for previous comparisons, because we don't know the PostgreSQL roadmap.

    Feature MySQL version
    Subqueries 4.1
    Foreign keys 5.0 (3.23 with InnoDB)
    Views 5.0
    Stored procedures 5.0
    Triggers 5.0
    Unions 4.0
    Full join 4.1
    Constraints 4.1 or 5.0
    Cursors 4.1 or 5.0
    R-trees 4.1 (for MyISAM tables)
    Inherited tables Not planned
    Extensible type system Not planned

    Other reasons someone may consider using PostgreSQL:

    Drawbacks with PostgreSQL compared to MySQL Server:

    For a complete list of drawbacks, you should also examine the first table in this section.

    1.9.2.3 Benchmarking MySQL and PostgreSQL

    The only Open Source benchmark that we know of that can be used to benchmark MySQL Server and PostgreSQL (and other databases) is our own. It can be found at http://www.mysql.com/information/benchmarks.html.

    We have many times asked the PostgreSQL developers and some PostgreSQL users to help us extend this benchmark to make it the definitive benchmark for databases, but unfortunately we haven't gotten any feedback for this.

    We, the MySQL developers, have, because of this, spent a lot of hours to get maximum performance from PostgreSQL for the benchmarks, but because we don't know PostgreSQL intimately, we are sure that there are things that we have missed. We have on the benchmark page documented exactly how we did run the benchmark so that it should be easy for anyone to repeat and verify our results.

    The benchmarks are usually run with and without the --fast option. When run with --fast we are trying to use every trick the server can do to get the code to execute as fast as possible. The idea is that the normal run should show how the server would work in a default setup and the --fast run shows how the server would do if the application developer would use extensions in the server to make his application run faster.

    When running with PostgreSQL and --fast we do a VACUUM after every major table UPDATE and DROP TABLE to make the database in perfect shape for the following SELECTs. The time for VACUUM is measured separately.

    When running with PostgreSQL 7.1.1 we could, however, not run with --fast because during the INSERT test, the postmaster (the PostgreSQL daemon) died and the database was so corrupted that it was impossible to restart postmaster. After this happened twice, we decided to postpone the --fast test until the next PostgreSQL release. The details about the machine we run the benchmark on can be found on the benchmark page.

    Before going to the other benchmarks we know of, we would like to give some background on benchmarks.

    It's very easy to write a test that shows any database to be the best database in the world, by just restricting the test to something the database is very good at and not testing anything that the database is not good at. If one, after doing this, summarises the result as a single figure, things are even easier.

    This would be like us measuring the speed of MySQL Server compared to PostgreSQL by looking at the summary time of the MySQL benchmarks on our web page. Based on this MySQL Server would be more than 40 times faster than PostgreSQL, something that is, of course, not true. We could make things even worse by just taking the test where PostgreSQL performs worst and claim that MySQL Server is more than 2000 times faster than PostgreSQL.

    The case is that MySQL does a lot of optimisations that PostgreSQL doesn't do. This is, of course, also true the other way around. An SQL optimiser is a very complex thing, and a company could spend years just making the optimiser faster and faster.

    When looking at the benchmark results you should look for things that you do in your application and just use these results to decide which database would be best suited for your application. The benchmark results also show things a particular database is not good at and should give you a notion about things to avoid and what you may have to do in other ways.

    We know of two benchmark tests that claim that PostgreSQL performs better than MySQL Server. These both where multi-user tests, a test that we here at MySQL AB haven't had time to write and include in the benchmark suite, mainly because it's a big task to do this in a manner that is fair to all databases.

    One is the benchmark paid for by Great Bridge, the company that for 16 months attempted to build a business based on PostgreSQL but now has ceased operations. This is probably the worst benchmark we have ever seen anyone conduct. This was not only tuned to only test what PostgreSQL is absolutely best at, but it was also totally unfair to every other database involved in the test.

    Note: We know that even some of the main PostgreSQL developers did not like the way Great Bridge conducted the benchmark, so we don't blame the PostgreSQL team for the way the benchmark was done.

    This benchmark has been condemned in a lot of postings and newsgroups, so here we will just briefly repeat some things that were wrong with it.

    Tim Perdue, a long-time PostgreSQL fan and a reluctant MySQL user, published a comparison on PHPbuilder (http://www.phpbuilder.com/columns/tim20001112.php3).

    When we became aware of the comparison, we phoned Tim Perdue about this because there were a lot of strange things in his results. For example, he claimed that MySQL Server had a problem with five users in his tests, when we know that there are users with similar machines as his that are using MySQL Server with 2000 simultaneous connections doing 400 queries per second. (In this case the limit was the web bandwidth, not the database.)

    It sounded like he was using a Linux kernel that either had some problems with many threads, such as kernels before 2.4, which had a problem with many threads on multi-CPU machines. We have documented in this manual how to fix this and Tim should be aware of this problem.

    The other possible problem could have been an old glibc library and that Tim didn't use a MySQL binary from our site, which is linked with a corrected glibc library, but had compiled a version of his own. In any of these cases, the symptom would have been exactly what Tim had measured.

    We asked Tim if we could get access to his data so that we could repeat the benchmark and if he could check the MySQL version on the machine to find out what was wrong and he promised to come back to us about this. He has not done that yet.

    Because of this we can't put any trust in this benchmark either. :(

    Over time things also change and the preceding benchmarks are not that relevant anymore. MySQL Server now has a couple of different storage engines with different speed/concurrency tradeoffs. 「7 MySQL テーブル型」節参照. It would be interesting to see how the above tests would run with the different transactional table types in MySQL Server. PostgreSQL has, of course, also got new features since the test was made. As these tests are not publicly available there is no way for us to know how the database would perform in the same tests today.

    Conclusion:

    The only benchmarks that exist today that anyone can download and run against MySQL Server and PostgreSQL are the MySQL benchmarks. We here at MySQL AB believe that Open Source databases should be tested with Open Source tools! This is the only way to ensure that no one does tests that nobody can reproduce and use this to claim that one database is better than another. Without knowing all the facts it's impossible to answer the claims of the tester.

    The thing we find strange is that every test we have seen about PostgreSQL, that is impossible to reproduce, claims that PostgreSQL is better in most cases while our tests, which anyone can reproduce, clearly show otherwise. With this we don't want to say that PostgreSQL isn't good at many things (it is!) or that it isn't faster than MySQL Server under certain conditions. We would just like to see a fair test where PostgreSQL performs very well, so that we could get some friendly competition going!

    For more information about our benchmark suite, see 「5.1.4 The MySQL Benchmark Suite」節.

    We are working on an even better benchmark suite, including multi-user tests, and a better documentation of what the individual tests really do and how to add more tests to the suite.


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