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

MySQLのENUM型とNOT NULL:デフォルト値の挙動を具体例で解説

MySQLのENUM型におけるNOT NULLの役割

MySQLのENUM(列挙型)データ型では、NOT NULL制約を宣言するかどうかによって、値を指定せずにINSERTした場合のデフォルト値の挙動が変わります。

  • NOT NULLを宣言しない場合:デフォルト値はNULLになります。
  • NOT NULLを宣言した場合:ENUMで定義した最初の値が自動的にデフォルト値として設定されます。

それぞれのケースについて、実際のSQL実行例を見ていきましょう。

CASE 1:NOT NULLなし → NULLが格納されるケース

まず、通常のENUMカラムを持つテーブルを作成します。

mysql> create table DemoTable1(isMarried ENUM('YES','NO'));
Query OK, 0 rows affected (0.76 sec)

次に、INSERT文で値を指定せずにレコードを追加します。

mysql> insert into DemoTable1 values();
Query OK, 1 row affected (0.18 sec)

SELECT文でテーブルの中身を確認してみましょう。

mysql> select *from DemoTable1;

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

+-----------+
| isMarried |
+-----------+
| NULL      |
+-----------+
1 row in set (0.00 sec)

このように、NOT NULLを宣言していないため、値を省略したレコードにはNULLが格納されました。

CASE 2:NOT NULLあり → 最初のENUM値が格納されるケース

続いて、ENUMカラムにNOT NULL制約を付けたテーブルを作成します。

mysql> create table DemoTable2 (isMarried ENUM('YES','NO') NOT NULL);
Query OK, 0 rows affected (0.57 sec)

CASE 1と同様に、値を指定せずにレコードを挿入します。

mysql> insert into DemoTable2 values();
Query OK, 1 row affected (0.17 sec)

SELECT文で結果を確認します。

mysql> select *from DemoTable2;

実行結果は以下のようになります。

+-----------+
| isMarried |
+-----------+
| YES       |
+-----------+
1 row in set (0.00 sec)

今回はNULLではなく、ENUMで定義した最初の値「YES」が格納されました。これは、NOT NULL制約があるカラムにNULLを設定できないため、MySQLが暗黙のデフォルト値として先頭の列挙値を採用するからです。

まとめ

ENUM型カラムのデフォルト挙動を整理すると以下の通りです。

定義方法値省略時のデフォルト値
NOT NULLなしNULL
NOT NULLありENUMの最初の値

意図しないデータが入らないよう、ENUMカラムを設計する際はNOT NULLの有無と、列挙値の並び順(最初の値がデフォルトになる点)に注意しましょう。

  1. JavaのPreparedStatementを使ってMySQLテーブルを更新する方法

    JavaからMySQLのテーブルを更新するには、PreparedStatementを使用するのが一般的で安全な方法です。PreparedStatementを使うことで、SQLインジェクションを防ぎつつ、パラメータを動的に設定できます。この記事では、実際にテーブルを作成し、Javaプログラムからレコードを更新するまでの一連の手順を解説します。1. テーブルの作成まず、MySQLで更新用のテーブルを作成しましょう。mysql> create table DemoTable( Id int, FirstName varchar(40) ); Query OK, 0 rows a

  2. MySQLでTIMESTAMP型のカラムを持つテーブルを作成する方法

    MySQLでは、TIMESTAMPキーワードを使用することで、日時を自動的に記録するカラムを持つテーブルを簡単に作成できます。TIMESTAMP型に「DEFAULT CURRENT_TIMESTAMP」を指定すると、レコード挿入時の現在日時が自動的に設定されるため、作成日時や更新日時の管理に非常に便利です。1. TIMESTAMPカラムを持つテーブルを作成するまず、CREATE TABLE文でTIMESTAMP型のカラムを含むテーブルを作成します。mysql> create table demo50 -> ( -> id int not null auto_increment