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. 「日付と時刻関数」 を参照。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.