自分のローカルで設定されているモード
$ 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行目以降で不良データを挿入しようとした時はエラーを起こし終了(部分更新が行われる)
- STRICT_TRANS_TABLES
参考
というかもはや以下の要約
MySQLのSQLモードをstrictモードで設定する。