デフォルト値
データ型仕様の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
の場合、デフォルトは最初の列挙値です。