MySQLのNOT NULL制約とは?空にできない列の定義方法とエラーの挙動を解説
MySQLでは、列にNULL(空の値)を許可したくない場合、テーブル定義時にNOT NULL制約を指定します。NOT NULLが設定された列にNULLを挿入しようとすると、MySQLはエラーを返し、データの登録を拒否します。
NOT NULL制約を持つテーブルの作成
まず、Id列とLastName列をNOT NULLとして指定したテーブルを作成してみましょう。
mysql> create table DemoTable1895
(
Id int NOT NULL,
FirstName varchar(20),
LastName varchar(20) NOT NULL
);
Query OK, 0 rows affected (0.00 sec)この例では、IdとLastNameにNOT NULLが設定されています。一方、FirstNameはNULLを許容する通常の列です。
INSERT時の動作を確認する
次に、INSERTコマンドでいくつかのレコードを挿入し、NOT NULL制約がどのように機能するかを確認します。
mysql> insert into DemoTable1895 values(100,'John','Smith'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1895 values(NULL,'Chris','Brown'); ERROR 1048 (23000): Column 'Id' cannot be null mysql> insert into DemoTable1895 values(102,'Carol',NULL); ERROR 1048 (23000): Column 'LastName' cannot be null mysql> insert into DemoTable1895 values(103,NULL,'Miller'); Query OK, 1 row affected (0.00 sec)
結果を見ると、次のことがわかります。
- IdにNULLを渡した2件目のINSERTは、
ERROR 1048: Column 'Id' cannot be nullというエラーで失敗しました。 - LastNameにNULLを渡した3件目のINSERTも、同様に
ERROR 1048: Column 'LastName' cannot be nullで拒否されました。 - 一方、NOT NULLが設定されていない
FirstNameにNULLを渡した4件目は、正常に登録されました。
登録されたデータを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1895;
実行すると、以下のような出力が得られます。
+-----+-----------+----------+ | Id | FirstName | LastName | +-----+-----------+----------+ | 100 | John | Smith | | 103 | NULL | Miller | +-----+-----------+----------+ 2 rows in set (0.00 sec)
まとめ
NOT NULL制約を設定した列は、必ず何らかの値を持つ必要があります。NULLを挿入しようとした場合、MySQLは「ERROR 1048」を返して登録を防ぎます。これにより、必須項目の欠落によるデータ不整合を事前に防止できるため、ユーザー情報やトランザクションデータなど、値が必須となる列には積極的にNOT NULLを指定することをおすすめします。
-
MySQLの既存のカラムにNOT NULL制約を設定する方法
MySQLですでに存在するカラムにNOT NULL制約を追加するには、ALTER TABLE文を使用します。この記事では、実際のSQL例を使いながら、NOT NULL制約の設定方法とその動作確認の手順をわかりやすく解説します。 1. テーブルの作成 まず、検証用のサンプルテーブルを作成します。 mysql> create table DemoTable1949 ( UserId int, UserName varchar(20) ); Query OK, 0 rows affected (0.00 sec) この時点では、UserNameカラムにはNUL
-
MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?
MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970 (