【MySQL】DEFAULT制約 - カラムの初期値
MySQLのDEFAULT制約について解説します。
検証環境
DEFAULT制約
DEFAULT制約は“カラムの初期値を設定する制約”です。
テーブルのレコード(データ)追加時に値を指定しない(DEFAULT制約がない)場合、初期値としてNULL
が設定されます。
mysql> CREATE TABLE sample ( num INT );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO sample VALUE ();
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM sample;
+------+
| num |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
この初期値をDEFAULT制約で任意の値に変更できます。
基本構文
カラム定義 DEFAULT 値
カラム定義に続いてDEFAULT 値
を記述します。
値
の部分は任意の初期値です。
サンプル
___ih_hl_start
mysql> CREATE TABLE sample ( num INT DEFAULT 8);
___ih_hl_end
Query OK, 0 rows affected (0.01 sec)
___ih_hl_start
mysql> INSERT INTO sample VALUE ();
___ih_hl_end
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM sample;
+------+
| num |
+------+
| 8 |
+------+
1 row in set (0.00 sec)
1行目のsample
テーブルの定義において、num
カラムの初期値をDEFAULT制約で8
にしています。
4行目のレコード追加では、num
カラムの値が未指定ですが、7行目の取得の結果から初期値の8
が適用されたことが分かります。
また、レコード追加時の値にDEFAULT
を明示的に記述し、初期値を設定できます。
mysql> CREATE TABLE sample ( num INT DEFAULT 8);
Query OK, 0 rows affected (0.01 sec)
___ih_hl_start
mysql> INSERT INTO sample VALUE ( DEFAULT );
___ih_hl_end
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM sample;
+------+
| num |
+------+
| 8 |
+------+
1 row in set (0.00 sec)
制約の確認
DEFAULT制約はDESCを使ったテーブル情報で確認できます。
mysql> CREATE TABLE sample ( num1 INT, num2 INT DEFAULT 8);
Query OK, 0 rows affected (0.00 sec)
mysql> DESC sample;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| num1 | int | YES | | NULL | |
| num2 | int | YES | | 8 | |
+-------+------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql>
DEFAULTの項目の値がカラムの初期値です。