# `Strict` モード

__*厳密な SQL モード*__
__*STRICT_TRANS_TABLES*__

+ モード値:**`STRICT_TRANS_TABLES`**
+ `Strict` モードが有効になっていない場合、`TiDB` はテーブルスキーマと制約に従って無効な値を変換する
  + 既存のデータを追加、置換、または更新すると、変換が行われます
  + `TiDB` は無効な値を最も近い有効値に調整する
    + 警告を生成します。次の方法で表示できます。**`SHOW WARNINGS`**
+ `Strict` モードでは、`TiDB` はエラーを生成してステートメントを中止する

------------------------------------------------------------

`TiDB` は一般に、多くの従来のデータベースシステムに比べて、無効なデータが送られても許容範囲が広いです。たとえば、`UNSIGNED` 列に負の値を書き込むと、`TiDB` はその列のデータ型に最も近い有効な値である 0 に変換します。`STRICT` モードでは、サーバーは範囲外の値、データ型が正しくない値、またはデフォルト値のない列で欠落している値を拒否します。

トランザクションテーブル (デフォルトのストレージエンジン InnoDB で作成されたテーブルなど) の使用中にエラーが発生し、`STRICT_TRANS_TABLES` が有効になっていると、ステートメントは中止されます。

非トランザクションテーブルでは、挿入操作の最初の (または唯一の) 行でエラーが発生すると、`TiDB` はステートメントを中止します。2 回目以降の挿入でエラーが発生した場合、`TiDB` は無効な値を正しい値に調整して挿入し、警告のみを生成します。これは、以前の挿入が成功したためです。


`STRICT_TRANS_TABLES`: 不正な値を挿入した後、ステートメント全体をロールバックします。