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

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)

この例では、IdLastNameに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を指定することをおすすめします。

  1. 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

  2. MySQLにおける「!=NULL」と「IS NOT NULL」の違いとは?

    MySQLでは、値を!=NULLと比較すると、結果は必ずNULLになります。つまり、!=NULLという比較は意味を持ちません。NULLは「不明な値」を表すため、通常の比較演算子では判定できないのです。NULL値を判定するには、専用の演算子であるIS NOT NULLを使用します。ここでは、!=NULLとIS NOT NULLの違いを実際に確認するために、まずテーブルを作成します。テーブルの作成まず、次のコマンドでテーブルを作成します。mysql> create table DemoTable1970     (