Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  データ型  /  データ型デフォルト値

11.6 データ型デフォルト値

データ型仕様の DEFAULT value 句は、カラムのデフォルト値を示しています。例外が 1 つあります。デフォルト値は定数である必要があるので、関数または式にはできません。これは、たとえば日付カラムのデフォルト値に NOW()CURRENT_DATE などの関数の値を設定できないことを意味します。例外では、CURRENT_TIMESTAMP を、TIMESTAMP および DATETIME カラムのデフォルトとして指定できます。セクション11.3.5「TIMESTAMP および DATETIME の自動初期化および更新機能」を参照してください。

BLOB および TEXT カラムにはデフォルト値を割り当てられません。

カラム定義に明示的な DEFAULT 値が含まれていない場合、MySQL はデフォルト値を次のように特定します。

NULL を値として取ることができる場合は、そのカラムは明示的な DEFAULT NULL 句で定義ができます。

NULL を値として取ることができない場合は、MySQL は明示的な DEFAULT 句でカラムを定義できません。例外: カラムが PRIMARY KEY の一部として定義されているが、NOT NULL として明示的には定義されていない場合、MySQL はこれを NOT NULL カラムとして作成します (PRIMARY KEY カラムは NOT NULL である必要があるので) が、暗黙的なデフォルト値を使用してこれに DEFAULT 句も割り当てます。これを防止するには、すべての PRIMARY KEY カラムの定義に明示的な NOT NULL を含めてください。

明示的な DEFAULT 句のない NOT NULL カラムに対するデータエントリでは、INSERT または REPLACE ステートメントにカラムの値を含まれていない場合、または UPDATE ステートメントがカラムを NULL に設定する場合、MySQL はその時点で有効な SQL モードに従ってカラムを処理します。

  • 厳密な SQL モードを有効にした場合、トランザクションテーブルに対してエラーが発生し、ステートメントがロールバックされます。非トランザクションテーブルではエラーが起きるが、これが複数行ステートメントの 2 行目以降の行に対するエラーの場合、先行する行が挿入されています。

  • 厳密モードが有効でない場合、MySQL はカラムデータ型の暗黙的なデフォルト値にカラムを設定します。

テーブル t が次のように定義されるとします。

CREATE TABLE t (i INT NOT NULL);

この場合、i は明示的なデフォルトがないので、厳密モードでは次のそれぞれはステートメントはエラーになり、行は挿入されません。厳密モードを使用しない場合、3 番目のステートメントだけでエラーが発生します。最初の 2 つのステートメントでは暗黙のデフォルトが挿入されますが、DEFAULT(i) が値を生成できないので 3 番目のステートメントは失敗します。

INSERT INTO t VALUES();
INSERT INTO t VALUES(DEFAULT);
INSERT INTO t VALUES(DEFAULT(i));

セクション5.1.7「サーバー SQL モード」を参照してください。

所定のテーブルに対して、SHOW CREATE TABLE ステートメントを使用すると、どのカラムに明示的な DEFAULT 句があるかを確認できます。

暗黙的なデフォルトは次のように定義されます。

  • 数値型のデフォルトは 0 です。ただし、例外として AUTO_INCREMENT 属性で宣言された整数型または浮動小数点型のデフォルトは、そのシーケンスの次の値になります。

  • TIMESTAMP 以外の日付と時間型のデフォルトには、ゼロ値が適切です。explicit_defaults_for_timestamp システム変数が有効な場合、これは TIMESTAMP にも当てはまります (セクション5.1.4「サーバーシステム変数」を参照してください)。それ以外の場合、テーブルの最初の TIMESTAMP カラムのデフォルト値は現在の日付と時間になります。セクション11.3「日付と時間型」を参照してください。

  • ENUM ではない文字列型のデフォルト値は空の文字列です。ENUM のデフォルトは、最初の列挙値です。

整数カラム定義の中の SERIAL DEFAULT VALUENOT NULL AUTO_INCREMENT UNIQUE のエイリアスです。


User Comments
Sign Up Login You must be logged in to post a comment.