kakiro-webカキローウェブ

システム開発情報とコンピューター書籍の紹介サイト

MySQL SQLモードの設定、確認について

MySQLでSQLの動作を指定するSQLモードについて、その設定、確認の方法を以下に示します。

※SQLモードの設定の内容については、当サイトのMySQL SQLモードの内容についてのページをご覧ください。

※ここで説明に使用しているMySQLは、当サイトのCentOS7 64bitのyumリポジトリにMySQLを追加し、最新バージョンをインストールのページを元にインストールしたバージョン5.6になります。

※データベースの作成については、当サイトのMySQL データベースの作成のページをご覧ください。

※テーブルの作成については、当サイトのMySQL テーブルの作成のページをご覧ください。

※データベース接続ユーザーの作成については、当サイトのMySQL データベース接続ユーザーの作成のページをご覧ください。

MySQLの設定ファイルでSQLモードの指定

MySQLのサービスを起動時のSQLモードの指定は、MySQLの設定ファイル(ここでの説明に使用しているCentOSでは「/etc/my.cnf」)で指定可能になっています。

デフォルトの設定は、以下のようになっています。

[mysqld]
:(略)
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  • SQLモードは、カンマ区切りで複数の値を指定可能になっています。

SQLで現在のSQLモードを確認

SQLモードを確認するには、以下のようなSQLを実行します。

mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode                          |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
  • 「@@GLOBAL」は、グローバル変数を示し、MySQLのサービスを起動中の各接続のセッションで、デフォルトで使用される設定になります。

mysql> SELECT @@SESSION.sql_mode;
+--------------------------------------------+
| @@SESSION.sql_mode                         |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
  • 「@@SESSION」は、セッション変数を示し、現在接続中のセッションで、使用されている設定になります。

SQLでグローバルのSQLモードを設定

グローバルのSQLモードを設定するには、以下のようなSQLを実行します。

mysql> SET GLOBAL sql_mode = '';
  • 「SET GLOBAL」文を使用して、グローバル変数の設定を行います。

  • 「sql_mode」に設定する値を指定します。

    ここでは、SQLモードを設定なし(空)にしています。

設定後、既に接続中の状態では、SQLモードは以下のようになります。

mysql> SELECT @@GLOBAL.sql_mode;
+-------------------+
| @@GLOBAL.sql_mode |
+-------------------+
|                   |
+-------------------+
mysql> SELECT @@SESSION.sql_mode;
+--------------------------------------------+
| @@SESSION.sql_mode                         |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+

セッションのSQLモードは変更されませんので、SQLの動作にも変更はありません。

設定後、新たに接続を行った状態では、SQLモードは以下のようになります。

mysql> SELECT @@GLOBAL.sql_mode;
+-------------------+
| @@GLOBAL.sql_mode |
+-------------------+
|                   |
+-------------------+
mysql> SELECT @@SESSION.sql_mode;
+--------------------+
| @@SESSION.sql_mode |
+--------------------+
|                    |
+--------------------+

セッションのSQLモードはグローバルのものに変更され、SQLの動作も変更されます。

尚、MySQLのサービスを再起動すると、SQLモードは設定ファイルで指定されている元の状態に戻ります。

mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode                          |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
mysql> SELECT @@SESSION.sql_mode;
+--------------------------------------------+
| @@SESSION.sql_mode                         |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+

SQLでセッションのSQLモードを設定

セッションのSQLモードを設定するには、以下のようなSQLを実行します。

mysql> SET SESSION sql_mode = '';
  • 「SET SESSION」文を使用して、セッション変数の設定を行います。

  • 「sql_mode」に設定する値を指定します。

    ここでは、SQLモードを設定なし(空)にしています。

設定後、既に接続中の状態では、SQLモードは以下のようになります。

mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode                          |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
mysql> SELECT @@SESSION.sql_mode;
+--------------------+
| @@SESSION.sql_mode |
+--------------------+
|                    |
+--------------------+

セッションのSQLモードが変更されますので、SQLの動作も変更されます。

設定後、新たに接続を行った状態では、SQLモードは以下のようになります。

mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode                          |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
mysql> SELECT @@SESSION.sql_mode;
+--------------------------------------------+
| @@SESSION.sql_mode                         |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+

セッションのSQLモードはグローバルのものになり、別の接続で行ったセッション変数の変更は影響されず、SQLの動作にも変更はありません。

尚、MySQLのサービスを再起動すると、SQLモードは設定ファイルで指定されている元の状態に戻ります。

mysql> SELECT @@GLOBAL.sql_mode;
+--------------------------------------------+
| @@GLOBAL.sql_mode                          |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
mysql> SELECT @@SESSION.sql_mode;
+--------------------------------------------+
| @@SESSION.sql_mode                         |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+

MySQL SQLモードの設定、確認については、以上です。

SQLのテクニックに関するおすすめの書籍

当サイトの書籍紹介ページで、SQLのテクニックに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。

SQLのパフォーマンスに関するおすすめの書籍

当サイトの書籍紹介ページで、SQLのパフォーマンスに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。

DB設計、SQLに関するおすすめの書籍

当サイトの書籍紹介ページで、DB設計、SQLに関するおすすめの書籍の紹介も行っておりますので、ご覧ください。