:: DEVELOPER ZONE
SET [GLOBAL | SESSION] sql_variable=expression,
[[GLOBAL | SESSION] sql_variable=expression] ...
SET は、サーバやクライアントの動作に影響を及ぼすさまざまなオプションを設定します。
以下の例は、変数の設定に使用できる各種の構文を示しています。
旧バージョンの MySQL では、SET OPTION 構文の使用を許可していましたが、今は廃止されています。
MySQL 4.0.3 では、GLOBAL オプション、SESSION オプション、および最も重要なスタートアップ変数へのアクセスを追加しています。
LOCAL は、SESSION のシノニムとして使用できます。
1 つのコマンドラインに複数の変数を設定する場合は、最後の GLOBAL | SESSION モードが使用されます。
SET sort_buffer_size=10000; SET @@local.sort_buffer_size=10000; SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000; SET @@sort_buffer_size=1000000; SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;
@@variable_name 構文は、MySQL 構文とその他のデータベースとの互換性を保持を目的にサポートされています。
このマニュアルのシステム変数のセクションに設定可能な多様なシステム変数に関する説明があります。 See 項6.1.5. 「システム変数」。
SESSION(デフォルト)を使用している場合、現在のセッションを終了するまで、あるいはこのオプションに別の値を設定するまで、設定したオプションが有効になります。SUPER 特権を必要とする GLOBAL を使用した場合、サーバの再起動が行われるまでオプションが記憶され、新規接続時も使用されます。オプションを永続的にする場合は、オプション設定ファイルに設定します。
See 項4.1.2. 「my.cnf オプション設定ファイル」。
不適切な使用を防ぐため、SET SESSION でしか使用できない変数とともに SET GLOBAL を使用した場合や、グローバル変数に SET GLOBAL を使用しない場合には MySQL からエラーが出力されます。
SESSION 変数を GLOBAL 値に、あるいは GLOBAL 値を MySQL のデフォルト値に設定する場合は、DEFAULT として設定することができます。
SET max_join_size=DEFAULT;
これは以下と等しいことになります。
SET @@session.max_join_size=@@global.max_join_size;
SET コマンドで設定可能なサーバ変数に最大値を設定して制限する場合、--maximum-variable-name コマンドラインオプションを使用して最大値を指定できます。 See 項4.1.1. 「mysqld コマンドラインオプション」。
SHOW VARIABLES を使用すると、ほとんどの変数の一覧が出力されます。
See 項4.6.8.4. 「SHOW VARIABLES」。 @@[global.|local.]variable_name 構文を使用すると特定の変数の値を取得できます。
SHOW VARIABLES like "max_join_size"; SHOW GLOBAL VARIABLES like "max_join_size"; SELECT @@max_join_size, @@global.max_join_size;
以下に、非標準 SET 構文を使用する変数およびその他の変数の一部について説明します。これ以外の変数定義は、システム変数セクションのスタートアップオプションの部分または SHOW VARIABLES の説明に記載されています。 See 項6.1.5. 「システム変数」。 See 項4.1.1. 「mysqld コマンドラインオプション」。 See 項4.6.8.4. 「SHOW VARIABLES」。
AUTOCOMMIT= 0 | 1
1 に設定すると、テーブルに対する変更すべてがただちに実行される。トランザクションを有効にする場合は、BEGIN ステートメントを使用する必要がある。See 項6.7.1. 「START TRANSACTION、COMMIT、ROLLBACK の各構文」。0 に設定した場合は、そのトランザクションを COMMIT で受け入れるか、ROLLBACK で取り消す必要がある。
See 項6.7.1. 「START TRANSACTION、COMMIT、ROLLBACK の各構文」。
AUTOCOMMIT モードを 0 から 1 に変更すると、開いているすべてのトランザクションに対して MySQL が COMMIT を自動実行するため注意が必要である。
1 に設定すると、テンポラリテーブルのすべてがメモリではなくディスクに格納される。これによって速度が少し低下するが、大きなテンポラリテーブルを必要とする大規模な SELECT 操作でもエラー The table tbl_name is full が出力されなくなる。新たに接続した場合のデフォルト値は 0(メモリ内テンポラリテーブルを使用)である。
この変数は旧称 SQL_BIG_TABLES であった。MySQL 4.0 では、MySQL によって必要に応じてメモリ内テーブルがディスクベーステーブルに自動変換されるため、通常この変数の設定が必要な状況はない。
CHARACTER SET character_set_name | DEFAULT
これは、クライアントとの間でやり取りされるすべての文字列に指定のマッピングを行う。
現在、character_set_name の唯一のオプションは cp1251_koi8 のみであるが、MySQL ソースディストリビューションの sql/convert.cc ファイルを編集して容易に新規のマッピングを追加できる。デフォルトのマッピングは、DEFAULT の character_set_name 値を使用してリストアできる。
CHARACTER SET オプションを設定する構文は、他のオプションを設定する構文とは異なるため注意が必要である。
DATE_FORMAT = format_str
サーバで DATE 値を文字列に変換する方法を設定する。この変数は、グローバルオプション、ローカルオプション、コマンドラインオプションのいずれでも使用できる。format_str の指定には GET_FORMAT() 関数の使用が便利である。
See 項6.3.4. 「日付と時刻関数」 を参照。
DATETIME_FORMAT = format_str
サーバで DATETIME 値を文字列に変換する方法を設定する。この変数は、グローバルオプション、ローカルオプション、コマンドラインオプションのいずれでも使用できる。format_str の指定には GET_FORMAT() 関数の使用が便利である。
See 項6.3.4. 「日付と時刻関数」 を参照。
INSERT_ID = #
次の INSERT や ALTER TABLE コマンドで使用される AUTO_INCREMENT 値を設定する。これは主としてバイナリログとともに使用される。
LAST_INSERT_ID = #
LAST_INSERT_ID() から返される値を設定する。これは、テーブルを更新するコマンドで LAST_INSERT_ID() 関数を使用した場合にバイナリログに格納される。
LOW_PRIORITY_UPDATES = 0 | 1
1 に設定した場合、全ての INSERT、UPDATE、DELETE、および LOCK TABLE WRITE ステートメントが、同じテーブルに対して実行されている SELECT や LOCK TABLE READ がなくなるまで待機する。
この変数は旧称 SQL_LOW_PRIORITY_UPDATES であった。
MAX_JOIN_SIZE = value | DEFAULT
value を超えるレコードの組み合わせを調べることが必要な SELECT ステートメント、または value を超えるディスクシークの実行が見込まれる SELECT ステートメントを許可しない。この値を設定すると、キーの使用が不適切で長時間かかると見込まれる SELECT ステートメントを捕捉できる。DEFAULT 以外の値に設定すると、SQL_BIG_SELECTS 値が 0 にリセットされる。SQL_BIG_SELECTS 値を設定しなおすと、SQL_MAX_JOIN_SIZE 変数は無視される。mysqld を --max_join_size=value オプションを指定して起動すると、この変数にデフォルト値を設定できる。この変数は旧称 SQL_MAX_JOIN_SIZE であった。
クエリ結果がすでにクエリキャッシュにある場合は、結果がすでに計算されており、クライアントへの送信による負荷がサーバにかからないため、結果サイズのチェックは実行されない。
現在のユーザのパスワードを設定する。すべての非匿名ユーザは各自のパスワードを変更できる。
PASSWORD FOR user = PASSWORD('パスワード')
現在のサーバホストの特定ユーザのパスワードを設定する。この実行は、mysql データベースへのアクセスがあるユーザに限られる。ユーザは user@hostname の形式で指定する必要がある。user と hostname は、mysql.user テーブルエントリの User カラムと Host カラムの記載どおりにする必要がある。たとえば、User フィールドと Host フィールドのエントリが 'bob' および '%.loc.gov' の場合は次のように入力する。
mysql> SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass');
これは以下と等しいことになる。
mysql> UPDATE mysql.user SET Password=PASSWORD('newpass')
-> WHERE User='bob' AND Host='%.loc.gov';
mysql> FLUSH PRIVILEGES;
QUERY_CACHE_TYPE = OFF | ON | DEMAND
, QUERY_CACHE_TYPE = 0 | 1 | 2
スレッドにクエリキャッシュ設定を行う。
| オプション | 説明 |
0 または OFF
|
結果のキャッシュや取り出しを行わない。 |
1 または ON
|
SELECT SQL_NO_CACHE ... クエリを除くすべての結果をキャッシュする。
|
2 または DEMAND は、 |
SELECT SQL_CACHE ... クエリのみをキャッシュする。
|
SQL_AUTO_IS_NULL = 0 | 1
1(デフォルト)に設定すると、WHERE auto_increment_column IS NULL の構造を使用して AUTO_INCREMENT カラムが含まれるテーブルで最後に挿入されたレコードを検索できる。これは、Access などの ODBC プログラムの一部で使用される。
SQL_BIG_SELECTS = 0 | 1
0 に設定すると、長時間要すると見込まれる(オプティマイザによって MAX_JOIN_SIZE の値を超えるレコード数が調べられると見込まれる)SELECT ステートメントが MySQL によって中止される。
これは不適切な WHERE ステートメントが使用された場合に役立つ。新たに接続した場合のデフォルト値は 1で、すべての 1 ステートメントが許可される。
MAX_JOIN_SIZE を DEFAULT 以外の値に設定すると、SQL_BIG_SELECTS が 0 に設定される。
SQL_BUFFER_RESULT = 0 | 1
SQL_BUFFER_RESULT は SELECT ステートメントからの結果を強制的にテンポラリテーブルに入れる。これは、MySQL によるテーブルロック解除の早期化と、結果セットのクライアントへの送信に長時間かかる場合に役立つ。
SQL_LOG_BIN = 0 | 1
0 に設定すると、クライアントに SUPER 特権がある場合、そのクライアントに関するバイナリログへのログ記録が行われなくなる。
SQL_LOG_OFF = 0 | 1
1 に設定すると、クライアントに SUPER 特権がある場合、そのクライアントに関する標準ログへのログ記録が行われなくなる。
SQL_LOG_UPDATE = 0 | 1
0 に設定すると、クライアントに SUPER 特権がある場合、そのクライアントに関する更新ログへのログ記録が行われなくなる。
バージョン 5.0 以降はこの変数が廃止されている。
SQL_QUOTE_SHOW_CREATE = 0 | 1
1 に設定すると、SHOW CREATE TABLE でテーブル名とカラム名がクオートされる。これはデフォルトでオンになっており、マルチバイト文字などを使用したカラム名をもつテーブルのレプリケーションを可能にする。
項4.6.8.8. 「SHOW CREATE TABLE」。
SQL_SAFE_UPDATES = 0 | 1
1 に設定すると、MySQL によって WHERE 節でキーや LIMIT を使用しない UPDATE または DELETE ステートメントが中止される。これで、手入力で SQL ステートメントを作成した場合に誤った更新の捕捉が実現される。
SQL_SELECT_LIMIT = value | DEFAULT
SELECT ステートメントから返されるレコードの最大数。SELECT に LIMIT 節がある場合、SQL_SELECT_LIMIT の値よりも LIMIT のほうが優先される。新たに接続した場合のデフォルト値は ``無制限'' である。この制限を変更した場合、DEFAULT の SQL_SELECT_LIMIT 値を使用してデフォルト値をリストアできる。
TIMESTAMP = timestamp_value | DEFAULT
クライアントに時間を設定する。これは、レコードのリストアにバイナリログを使用する場合、オリジナル(ログが記録された時点)のタイムスタンプにするために使用される。timestamp_value は MySQL タイムスタンプではなく Unix 基準時点のタイムスタンプにする必要がある。
TIME_FORMAT = format_str
サーバで TIME 値を文字列に変換する方法を設定する。この変数は、グローバルオプション、ローカルオプション、コマンドラインオプションのいずれでも使用できる。format_str の指定には GET_FORMAT() 関数の使用が便利である。
See 項6.3.4. 「日付と時刻関数」 を参照。
© 1995-2005 MySQL AB. All rights reserved.
