デフォルト値
データ型仕様のDEFAULT value 句は、列のデフォルト値を示します。デフォルト値は定数である必要があり、関数や式は使用できません。ただし、時間タイプの場合は、 NOW 、 CURRENT_TIMESTAMP 、 LOCALTIME 、およびLOCALTIMESTAMP関数をTIMESTAMP列とDATETIME列のデフォルトとして指定できます。
BLOB 、 TEXT 、およびJSON列にはデフォルト値を割り当てることはできません。
列定義に明示的なDEFAULT値が含まれていない場合、TiDB は次のようにデフォルト値を決定します。
- 列が値として
NULLを取ることができる場合、その列は明示的なDEFAULT NULL句で定義されます。 - 列が値として
NULLを取ることができない場合、TiDB は明示的なDEFAULT句を使用せずに列を定義します。
明示的なDEFAULT句のないNOT NULL列へのデータ入力の場合、 INSERTまたはREPLACEステートメントにその列の値が含まれていない場合、TiDB はその時点で有効な SQL モードに従って列を処理します。
- 厳密な SQL モードが有効な場合、トランザクション テーブルでエラーが発生し、ステートメントはロールバックされます。非トランザクションテーブルの場合、エラーが発生します。
- 厳密モードが有効になっていない場合、TiDB は列をその列データ型の暗黙的なデフォルト値に設定します。
暗黙的なデフォルトは次のように定義されます。
- 数値型の場合、デフォルトは 0 です
AUTO_INCREMENT属性で宣言された場合、デフォルトはシーケンス内の次の値になります。 TIMESTAMP以外の日付と時刻の型の場合、デフォルトはその型に適切な「ゼロ」値です。TIMESTAMPの場合、デフォルト値は現在の日付と時刻です。ENUM以外の文字列型の場合、デフォルト値は空の文字列です。ENUMの場合、デフォルトは最初の列挙値です。