概要: MySQL データベース管理者として、私たちはしばしば Null と戦わなければなりません。ただし、注意しなければならない大きな落とし穴が 2 つあります。
MySQL データベースは、構造化データに基づくオープンソース データベースです。 SQL ステートメントは、MySQL データベースの中核となる言語です。ただし、MySQL データベースで SQL ステートメントを実行する場合は、2 つの落とし穴に注意する必要があります。
null 値は特別なフィールドです。 MySQL データベースでは、null 値はさまざまな状況で異なる意味を表すことがよくあります。これは MySQL データベースの機能です。たとえば、通常のフィールド (文字データ) では、NULL 値は NULL 値を表します。ただし、TimesTamp タイプのフィールドに null 値を挿入した場合、null 値は必ずしも null であるとは限りません。このとき (以下に示すように) 何が起こるでしょうか?
最初にテーブルを作成しました。このテーブルには、User_id (データ型は int)、Date (データ型は TimesTamp) の 2 つのフィールドがあります。次に、このテーブルにレコードを挿入します。このテーブルでは、日付フィールドに NULL 値が挿入されます。しかし、クエリを実行すると、結果にはレコードが挿入された現在の時刻が表示されます。何が起こっているのでしょうか? 実際、これは MySQL データベースで SQL ステートメントを実行するときによく発生する罠です。つまり、null 値は必ずしも null であるとは限りません。操作中に NULL 値が挿入されたことは明らかですが、最終的なクエリ結果は NULL 値ではありません。
MySQL データベースでは、NULL は単なる null 値ではなく、一部の特別なタイプの列に対する特別な意味を表します。このような特殊なタイプのコラムについて、読者が覚えておくべき主な点が 2 つあります。 1 つは、前述の TimesTamp データ型です。このデータ型の列に Null 値を挿入すると、その値はシステムの現在時刻を表します。もう 1 つは auto_increment 属性を持つ列です。この属性の列に Null 値を挿入すると、システムは一連の正の整数を挿入します。また、文字データなど、他のデータ型の列に Null データを挿入すると、Null 値が挿入されます。
MySQL では、Null 値 (Null) は Null 文字 ('') と同じですか? 答えは「いいえ」です。以下のデモンストレーションをご覧ください。
同じデータベーステーブルに、Null 値データと '' Null 文字データを同時に挿入し、Select ステートメントを使用してクエリを実行します。最終的に表示される結果は上の図に示されています。明らかに表示される結果が異なります。この結果から、NULL 値は NULL 文字と等しくないことがわかります。これは、MySQL で SQL ステートメントを実行するときに発生する 2 番目のトラップです。実際の業務では、null データと null 文字は異なる意味を持つことがよくあります。データベース管理者は、実際のニーズに基づいて選択できます。
電話番号などのフィールドは、デフォルトでnull値(相手の電話番号が全くわからないことを示す)や空文字(後で番号がキャンセルされたことを示す)などに設定できます。これらはデータベース内で異なる表現を持つため、データベース管理者はそれらを異なる方法で扱う必要があります。作成者は、null 文字ではなく null 値を使用することを好みます。これは主に、NULL 値のデータ型に特殊な演算文字がいくつかあるためです。フィールドに null 文字が含まれている場合、データベースは代わりにフィールド名を使用します。逆にNULL値を挿入した場合は、そのままNULLが表示されます。これは、他のデータベースの表示方法とも異なります。
1 つは、IS NULL キーワードと IS NOT NULL キーワードです。フィールドに NULL 値のデータが含まれているかどうかを確認したい場合は、特別なキーワードを使用する必要があります。前者はこのフィールドが空であることを意味し、後者はこのフィールドが空ではないことを意味します。これら 2 つのキーワードは、Select ステートメントのクエリ条件で非常に役立ちます。電話番号が空のすべてのユーザーをクエリする必要がある場合 (および電話番号情報を補足する必要がある場合)、クエリ条件に is not null キーワードを追加できます。
2 つ目は Count などの統計関数で、これにも null 値に対する特別なアプリケーションがあります。ユーザー情報テーブルに電話番号を持つユーザーの数をカウントする必要がある場合は、count 関数を使用して電話番号をパラメーターとして使用できます。統計処理中に、この関数は NULL 値データを自動的に無視するためです。このときカウントされるのは電話番号を伴うユーザー情報です。 NULL文字を含むデータが使用されている場合、この関数はそれをカウントします。次の図に示すように、作成された 2 つのレコードをカウントすると、システム統計の結果は 2 ではなく 1 になります。システムが Null 値データを自動的に無視していることがわかります。
上記は、MySQL で Null を扱うときに注意すべき 2 つの落とし穴です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。