MySQL ENUMデータ型の主な属性(NOT NULL・NULL・DEFAULT)の意味と挙動を実例で解説
MySQLのENUM型は、カラムに許容される値やNULLの扱い方を制御するための複数の属性を指定して定義できます。ここでは、代表的な属性であるNOT NULL、NULL、DEFAULTの3つについて解説し、実際のSQL実行例でそれぞれの挙動を確認します。
ENUMデータ型に指定できる主な属性
NOT NULL
ENUM型では、デフォルトの状態でNULL値が許可されています。NULL値を禁止したい場合は、ENUMカラムを定義するときにNOT NULL属性を指定します。NOT NULLを付けたカラムにNULLを挿入しようとすると、エラーまたは警告が発生します。
NULL
NULL属性は「DEFAULT NULL」の別名(シノニム)です。NULLが格納された場合、そのENUM値のインデックス値もNULLになります。
DEFAULT
DEFAULT属性を指定すると、INSERT文で値が明示されなかった場合に、ENUM型カラムへ自動的にデフォルト値が挿入されます。つまり、INSERT文でこのフィールドの値を省略しても問題なく、DEFAULTの後に記述した値が使われます。ただし、DEFAULT式の中で関数を使用することはできません。ENUMデータ型で利用できるDEFAULT値には、NULLおよび空文字列('')があります。
実行例:属性を組み合わせたENUMカラムの挙動
次の例では、「NOT NULL」と「DEFAULT '1'」を組み合わせたENUMカラムを持つテーブルを作成し、さまざまな値を挿入したときの動作を確認しています。
mysql> SET SESSION sql_mode = '';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE enumtesting(e_value ENUM('a','1') NOT NULL DEFAULT '1', id TINYINT NOT NULL);
Query OK, 0 rows affected (0.23 sec)
mysql> INSERT INTO enumtesting(e_value,id) VALUES('1',1),('',2),(NULL,3),('abc',4);
Query OK, 4 rows affected, 3 warnings (0.09 sec)
Records: 4 Duplicates: 0 Warnings: 3
mysql> SHOW WARNINGS;
+---------+------+----------------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------------+
| Warning | 1265 | Data truncated for column 'e_value' at row 2 |
| Warning | 1048 | Column 'e_value' cannot be null |
| Warning | 1265 | Data truncated for column 'e_value' at row 4 |
+---------+------+----------------------------------------------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM enumtesting;
+---------+----+
| e_value | id |
+---------+----+
| 1 | 1 |
| | 2 |
| | 3 |
| | 4 |
+---------+----+
4 rows in set (0.00 sec)
mysql> INSERT INTO enumtesting(id) VALUES(5);
Query OK, 1 row affected (0.11 sec)
mysql> SELECT * FROM enumtesting;
+---------+----+
| e_value | id |
+---------+----+
| 1 | 1 |
| | 2 |
| | 3 |
| | 4 |
| 1 | 5 |
+---------+----+
5 rows in set (0.00 sec)
mysql> SELECT e_value, e_value+0 AS enum_index, id FROM enumtesting;
+---------+------------+----+
| e_value | enum_index | id |
+---------+------------+----+
| 1 | 2 | 1 |
| | 0 | 2 |
| | 0 | 3 |
| | 0 | 4 |
| 1 | 2 | 5 |
+---------+------------+----+
5 rows in set (0.00 sec)
実行結果のポイント
- sql_modeを空に設定した場合:厳密モードが無効になるため、無効な値やNULLの挿入はエラーではなく警告として処理され、代わりに空文字列が格納されます。
- 警告の内容:空文字列や'abc'など許可されていない値に対しては「Data truncated」(データが切り詰められた)、NULLの挿入に対しては「Column cannot be null」という警告が出力されます。
- DEFAULT属性の効果:最後のINSERT文ではe_valueを省略してidのみを指定しましたが、DEFAULT '1'が適用され、e_valueに'1'が自動的に挿入されています。
- ENUMのインデックス値:「e_value + 0」のように数値として評価すると、内部インデックスを確認できます。ENUMの要素には1から順に番号が振られるため、'a'が1、'1'が2となります。無効な値(空文字列など)は0、NULLはNULLとして扱われます。
-
MySQLの主な機能とは?特徴をわかりやすく解説
MySQLは、データを効率的に保存・管理するためのデータベース管理システム(DBMS)です。データベースは一般的に、データを構造化された形式で格納します。MySQLはC言語とC++で記述されており、さまざまなコンパイラでテストが行われ、バグや不整合がないことが確認されています。ここでは、MySQLの主な機能について詳しく見ていきましょう。オープンソースMySQLはオープンソースソフトウェアであり、誰でも自由にダウンロード、利用、改変することができます。無料で使用でき、理解しやすいのも大きな魅力です。ソースコードは公開されているため、必要に応じて内容を確認したり変更したりできます。ライセンスには
-
C#の配列で扱えるデータ型の種類と宣言方法をわかりやすく解説
C#では、整数(int)や文字(char)、浮動小数点数(double)など、さまざまなデータ型の配列を作成できます。配列は複数のデータをまとめて格納するための仕組みですが、「同じ型の変数が連続したメモリ領域に順番に並んで格納された集合」と捉えると、その動作がより理解しやすくなります。要素の型としては、int(整数)、char(文字)、float・double(浮動小数点数)など、C#で利用できる任意の型を指定できます。 配列の基本的な宣言構文 配列を宣言する際の基本構文は次のとおりです。 datatype[] Name_of_array; 構文の各要素の意味 datatype:配列に格