MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでDEFAULT NULLを明示的に指定する必要はある?基本と動作を実例で解説

結論:DEFAULT NULLの指定は必須ではない

MySQLでは、DEFAULT NULLを明示的に指定しなくても問題ありません。NULLを許容するカラム(NOT NULL制約が付いていないカラム)は、デフォルトで暗黙的にNULLを許可するためです。

つまり、DEFAULT NULLを指定していなくても、値を指定せずにレコードを挿入した場合、そのカラムには自動的にNULLが格納されます。

実際に検証してみよう

1. テーブルを作成する

まず、DEFAULT NULLを指定せずにシンプルなテーブルを作成します。

mysql> create table DemoTable
(
    FirstName varchar(100)
);
Query OK, 0 rows affected (0.57 sec)

FirstNameカラムには何もオプションを指定していませんが、この状態でもNULLは許容されています。

2. レコードを挿入する

次に、値ありのレコードと、値なしのレコードを挿入してみます。

mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.12 sec)

2番目と3番目のINSERT文では値を指定していませんが、エラーにならずに登録できています。

3. データを確認する

SELECT文で全レコードを表示して結果を確認しましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-----------+
| FirstName |
+-----------+
| Chris     |
| NULL      |
| NULL      |
| David     |
+-----------+
4 rows in set (0.00 sec)

結果からわかること

値を指定せずに挿入された2件のレコードには、自動的にNULLが格納されていることが確認できます。これは、カラム定義にDEFAULT NULLを書かなくても、NULL許容カラムであれば暗黙のデフォルト値としてNULLが適用されるためです。

まとめ

・MySQLでは、NULLを許可したいカラムに対してDEFAULT NULLを明示的に書く必要はない。
・指定しない場合でも、値なしで挿入されれば自動的にNULLになる。
・ただし、設計意図を明確にするためにDEFAULT NULLを明記するチームやプロジェクトもあるため、コーディング規約がある場合はそれに従うのが望ましいでしょう。


  1. MySQLでカラムのデフォルト値をNULLに設定する方法

    MySQLでは、DEFAULT NULLを指定することで、カラムのデフォルト値をNULLに設定できます。本記事では、実際にテーブルを作成し、デフォルト値NULLがどのように機能するかを具体的な例とともに解説します。デフォルト値がNULLのテーブルを作成するまず、DEFAULT NULLを指定したテーブルを作成します。mysql> create table DemoTable1440 -> ( -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> StudentName varchar(2

  2. MySQLでDATETIME型の日時に日数を追加する方法

    MySQLでは、DATE_ADD()関数を使うことで、DATETIME型の値に指定した日数を簡単に追加できます。この記事では、実際にテーブルを作成し、日時フィールドに日数を加算するまでの手順を具体例とともに解説します。 1. テーブルの作成 まず、DATETIME型のカラムを持つテーブルを作成します。 mysql> create table DemoTable1871     (     ArrivalDate datetime     ); Query OK, 0