デフォルト値
データ型仕様のDEFAULT
値句は、列のデフォルト値を示します。デフォルト値は定数でなければならず、関数または式にすることはできません。ただし、時間型の場合、 TIMESTAMP
列とDATETIME
列のデフォルトとしてNOW
、 CURRENT_TIMESTAMP
、 LOCALTIME
、およびLOCALTIMESTAMP
関数を指定できます。
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
の場合、デフォルトは最初の列挙値です。