1
0

More than 3 years have passed since last update.

MySQLのモードに関して

Posted at

自分のローカルで設定されているモード

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.29, for osx10.15 (x86_64) using  EditLine wrapper
$ mysql -uroot -p
mysql> select @@global.sql_mode;
+------------------------------------------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode                                                                                                                                    |
+------------------------------------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
  • STRICT_TRANS_TABLES
  • STRICT_ALL_TABLES
  • NO_ZERO_IN_DATE
  • NO_ZERO_DATE
  • ERROR_FOR_DIVISION_BY_ZERO
  • NO_AUTO_CREATE_USER
  • NO_ENGINE_SUBSTITUTION

なお、これは紛れもなく、TRADITIONALモードである。TRADITIONALモードとは上の7つのモードが全て有効になっている状態を言う組み合わせモードなのだ。

STRICTモード

STRICT_TRANS_TABLESモードとSTRICT_ALL_TABLESモードのいずれかが有効な場合、それはSTRICTモードである。

  • トランザクションストレージエンジン

    • 不正な値が挿入されようとした場合、エラーを発し(不良データ値は調整されない)、ロールバックする
  • 非トランザクションストレージエンジン

    • STRICT_TRANS_TABLES
      • 1行目で不良データを挿入しようとした時はエラーを起こし終了
      • 2行目以降で不良データを挿入しようとした時は不良データを調整して挿入し、(エラーではなく)警告を発する
    • STRICT_ALL_TABLES
      • 1行目でも2行目以降で不良データを挿入しようとした時はエラーを起こし終了(部分更新が行われる)

参考

というかもはや以下の要約
MySQLのSQLモードをstrictモードで設定する。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0