このセクションでは、MySQL と ANSI/ISO SQL 標準との関連について説明します。 MySQL Server には SQL 標準に対する多数の拡張機能があり、ここでは、それらの拡張機能と使用方法について説明します。 また、MySQL Server に不足している機能と、この不足分に対処する方法に関する情報も示します。
SQL 標準は 1986 年以降開発が繰り返され、複数のバージョンがあります。 このマニュアルでは、「SQL-92」 は 1992 年にリリースされた標準を指します。 「SQL:1999」、「SQL:2003」、「SQL:2008」 および 「SQL:2011」 は、対応する年にリリースされた標準のバージョンを参照します。最新バージョンは最新バージョンです。 「SQL 標準」や「標準 SQL」という語句は、常に SQL 標準の現バージョンを意味します。
製品に関する当社の主な目標の 1 つは、速度や信頼性を犠牲にすることなく、SQL 標準への準拠に向けた取り組みを続けることです。 大部分のユーザーにとって MySQL Server が大幅に使いやすくなるのであれば、当社は SQL に対する拡張機能や SQL 以外の機能のサポートを積極的に追加します。 HANDLER
インタフェースがこの方針の一例です。 セクション13.2.4「HANDLER ステートメント」を参照してください。
24 時間 365 日のミッションクリティカルな使用にも、負荷のかかる Web またはロギングの使用にも対応できるように、トランザクションデータベースと非トランザクションデータベースのサポートを継続しています。
MySQL Server は当初、小規模なコンピュータシステムで中規模のデータベース (1,000 万から 1 億行、または 1 テーブルあたり約 100M バイト) を操作できるように設計されました。 現在、MySQL Server はテラバイトサイズのデータベースを処理しています。
MySQL レプリケーション機能は重要な機能を提供しますが、リアルタイムサポートは対象としていません。
MySQL は ODBC レベル 0 から 3.51 をサポートします。
MySQL は、NDBCLUSTER
ストレージエンジンを使用した高可用性データベースクラスタリングをサポートします。 第23章「MySQL NDB Cluster 8.0」を参照してください。
ほとんどの W3C XPath 標準をサポートする XML 機能を実装しています。 セクション12.12「XML 関数」を参照してください。
MySQL では、RFC 7159 で定義され、ECMAScript 標準 (ECMA-262) に基づくネイティブ JSON データ型がサポートされています。 セクション11.5「JSON データ型」を参照してください。 MySQL では、SQL:2016 標準の公開前のドラフトで指定された SQL/JSON 関数のサブセットも実装されます。詳細は、セクション12.18「JSON 関数」 を参照してください。
SQL モードの選択
MySQL Server は異なる SQL モードで動作でき、sql_mode
システム変数の値に応じて異なるクライアントにこれらの異なるモードを適用できます。 DBA はサイトサーバーの動作要件に一致するグローバル SQL モードを設定でき、各アプリケーションはアプリケーションのセッション SQL モードをアプリケーション独自の要件に設定できます。
モードは MySQL がサポートする SQL 構文と、MySQL が実行するデータ検証に影響します。 これにより、MySQL をさまざまな環境で使用したり、MySQL をほかのデータベースサーバーと一緒に使用したりすることが、さらに容易になります。
SQL モードの設定の詳細は、セクション5.1.11「サーバー SQL モード」を参照してください。
ANSI モードでの MySQL の実行
ANSI モードで MySQL Server を実行するには、--ansi
オプションを付けて mysqld を起動します。 ANSI モードでのサーバーの実行は、次のオプションを指定してサーバーを起動する場合と同じです。
--transaction-isolation=SERIALIZABLE --sql-mode=ANSI
実行時に同じ効果を得るには、次の 2 つのステートメントを実行します。
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET GLOBAL sql_mode = 'ANSI';
次のように、sql_mode
システム変数値を 'ANSI'
に設定すると、ANSI モードに関連するすべての SQL モードオプションが有効になります。
mysql> SET GLOBAL sql_mode='ANSI';
mysql> SELECT @@GLOBAL.sql_mode;
-> 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI'
--ansi
を使用して ANSI モードでサーバーを実行した場合は、--ansi
オプションがトランザクション分離レベルも設定するため、SQL モードを 'ANSI'
に設定した場合とは少し異なります。
セクション5.1.7「サーバーコマンドオプション」を参照してください。