{category}

MySQL - 制約

NOT NULL

ノット ヌル(データ型と制約

意味 NULL値を禁止する制約


NOT NULLとは?

NOT NULLは、指定されたカラムにNULL値(空の値)を許可しない制約です。これにより、そのカラムに必ず何らかの値が入力されることを保証します。データの完全性を維持するのに役立ちます。

NOT NULLの具体的な使い方

NOT NULL制約の例

CREATE TABLE students (
  id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL
);

INSERT INTO students (id, name) VALUES (1, 'John');
INSERT INTO students (id, name) VALUES (2, 'Jane');

-- NULL値を挿入しようとするとエラーが発生
INSERT INTO students (id, name) VALUES (3, NULL);

SELECT * FROM students;

👇出力結果

Error Code: 1048. Column 'name' cannot be null

id | name
1  | John
2  | Jane

この例では、studentsテーブルを作成し、nameカラムにNOT NULL制約を設定しています。これにより、各学生の名前が必ず入力されることが保証されます。NULL値を挿入しようとするとエラーが発生します。

NOT NULLに関するよくある質問

Q. NOT NULLとDEFAULTの併用は可能?
A. はい、NOT NULL制約とDEFAULT制約を併用することは可能で、よく行われる practice です。例えば、CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50) NOT NULL DEFAULT 'Anonymous'); のように設定すると、nameカラムに値が指定されない場合でも'Anonymous'というデフォルト値が自動的に設定され、NULL値が入ることを防ぎます。
Q. 既存のカラムにNOT NULLを追加可能?
A. 既存のカラムにNOT NULL制約を追加することは可能ですが、そのカラムに既にNULL値が存在する場合は注意が必要です。NULL値が存在する場合、まずそれらの値を適切な値に更新してから、ALTER TABLE table_name MODIFY column_name data_type NOT NULL; のようなコマンドでNOT NULL制約を追加します。既存のNULL値を処理せずに制約を追加しようとするとエラーが発生します。
Q. NOT NULLは性能に影響しますか?
A. 一般的に、NOT NULL制約自体が直接的に大きな性能影響を与えることはありませんが、間接的にいくつかの利点があります。1) インデックスの効率: NULL値を含まないカラムはインデックスの効率が向上します。2) ストレージ最適化: NULL値の管理にはわずかなオーバーヘッドがあるため、NOT NULLカラムはストレージをより効率的に使用できます。3) クエリの最適化: NULLチェックが不要になるため、クエリの最適化が容易になります。ただし、これらの影響は通常小さく、大規模なデータベースや高負荷の環境でより顕著になります。

NOT NULLが学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、MySQLのNOT NULLやUNIQUE、TIMESTAMP、DATETIME、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


MySQLを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!MySQLはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

UNIQUE

重複を禁止する制約

種類: 制約

TIMESTAMP

日時を自動更新するデータ型

種類: 日付と時間型

DATETIME

日付と時刻を表すデータ型

種類: 日付と時間型

SHOW BINARY LOGS

バイナリログの一覧表示

種類: バイナリログ管理

SAVEPOINT

トランザクション内の中間地点

種類: セーブポイント