MySQLのよくある間違い

MySQLのよくある間違い

NULL 値によると、MySQL の NULL 値は単にデータがないことを意味します。NULL 値は、一部の型のゼロ値とは異なります。たとえば、int 型のゼロ値は 0 で、文字列のゼロ値は "" ですが、これらには null ではなく、データがまだあります。

データを保存する際、一時的に利用できないデータは null として記録され、現時点では有効な情報を提供できないことが示されます。

ただし、nullを使用する場合は、いくつかの問題に注意する必要があります。MySQLのドキュメントでは、次のように説明されています。

null 使用時にエラーが発生しやすい点

以下では、MySQL 関係者が挙げている null のエラーが発生しやすいポイントについて説明します。

MySQL に慣れていない人は、null 値とゼロ値を簡単に混同する可能性があります。

NULL値の概念はSQL初心者にとってよくある混乱の原因です。

たとえば、次の2つのSQL文によって生成されるデータは独立している。

mysql> my_table (phone) に VALUES (NULL) を挿入します。
mysql> my_table (phone) に値 ('') を挿入します。

最初のSQL文は、電話番号が現時点では不明であることのみを示しており、2番目の文は電話番号が既知であり、 ''として記録されていることを示しています。

どちらのステートメントも電話列に値を挿入しますが、最初のステートメントは NULL 値を挿入し、2 番目のステートメントは空の文字列を挿入します。最初のステートメントの意味は「電話番号が不明」であり、2 番目のステートメントの意味は「その人は電話を持っていないことがわかっているため、電話番号はない」であると考えられます。

nullの論理的判断は別途処理する必要がある

値が null かどうかを判断するには、特殊な構文IS NULLIS NOT NULLIFNULL()を使用する必要があります。

NULL 処理を支援するために、IS NULL および IS NOT NULL 演算子と IFNULL() 関数を使用できます。

=を使って判断すると、常に偽になります

SQLでは、NULL値は他の値と比較しても真にはなりません。NULLであってもです。

NULLである列値を検索するには、expr = NULLテストは使用できません。次のステートメントは、expr = NULLが真になることはないため、行を返しません。

たとえば、次のように記述すると、where テストの結果は true になりません。

my_table から * を選択 WHERE phone = NULL;

null と他のデータを使用して計算を行う場合、MySQL ドキュメントで特定の操作について追加の特別な指示がない限り、結果は常に null になります。

NULLを含む式は、式に含まれる演算子と関数のドキュメントで特に指定がない限り、常にNULL値を生成します。

例えば:

mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);
+------+--------+---------------------------+
| NULL | 1+NULL | CONCAT('Invisible',NULL) |
+------+--------+---------------------------+
| NULL | NULL | NULL |
+------+--------+---------------------------+
セット内の 1 行 (0.00 秒)

したがって、null について論理的な判断を下したい場合は、 IS NULL

NULL値を探すには、IS NULLテストを使用する必要があります。

NULL値を持つ列のインデックス作成には、隠れた詳細をさらに予測する必要がある

InnoDB、MyISAM、および MEMORY ストレージ エンジンのみが、null 値を持つ列のインデックス作成をサポートします。

MyISAM、InnoDB、または MEMORY ストレージ エンジンを使用している場合は、NULL 値を持つことができる列にインデックスを追加できます。それ以外の場合は、インデックスが付けられた列を NOT NULL として宣言する必要があり、列に NULL を挿入することはできません。

インデックスの長さは通常のインデックスより 1 長くなります。つまり、消費するメモリがわずかに多くなります。

キーの保存形式により、NULL になる可能性がある列のキーの長さは、NOT NULL 列のキーの長さよりも 1 長くなります。

グループ化、重複排除、およびnull値のソートは特別に扱われます

=null は常に false であるという上記の記述とは反対に、null は等しいとみなされます。

DISTINCT、GROUP BY、ORDER BY を使用する場合、すべての NULL 値は等しいとみなされます。

null値のソートは特別に扱われます。

NULL値は最初または最後にソートされます。

ORDER BY を使用する場合、NULL 値は最初に提示され、DESC を指定して降順で並べ替える場合は最後に提示されます。

集計操作中はNullは無視されます

COUNT()、MIN()、SUM()などの集計(グループ)関数はNULL値を無視します。

たとえば、count(*) は null 値を持つデータをカウントしません。

例外は COUNT(*) で、これは行をカウントしますが、個々の列の値はカウントしません。たとえば、次のステートメントは 2 つのカウントを生成します。1 つ目はテーブル内の行数のカウントで、2 つ目は age 列の NULL 以外の値の数のカウントです。

mysql> SELECT COUNT(*), COUNT(age) FROM person;

上記は、MySQL null のよくある間違いの詳細です。MySQL null の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL フィールドで NOT NULL を使用する必要があるのはなぜですか?
  • MySQLのnull値に関する小さな問題
  • MySQL の null と not null、null と空の値の違いの詳細な説明''''''''
  • MySQL IFNULL判定問題の解決方法
  • MySQL で null 値と空文字 ('''') を区別する
  • mysql の not equal to null と equal to null の書き方の詳細説明
  • MySQL NULLがピットを引き起こした
  • MySQL の null (IFNULL、COALESCE、NULLIF) に関する知識ポイントのまとめ
  • MySQLの3値ロジックとNULLの詳細な説明

<<:  Windows 10でDockerコンテナのポートにアクセスできない問題に対する完璧な解決策

>>:  18 個のキラー JavaScript ワンライナー

推薦する

複数のdiv内のテーブルのtdwidth設定は同じで、揃えることができません

最近、複数のdivにあるテーブルのTDを同じ幅に調整しても、揃えることができず、幅にパターンがないこ...

MySQLデータベースの使用仕様の概要

導入: MySQL データベースの仕様に関しては、皆さんも何らかのドキュメントを読んだことがあると思...

Docker-compose インストール db2 データベース操作

db2 データベースをホストマシンに直接インストールするのは面倒で、ユーザーや権限を巻き込むのも不便...

CentOS7 に YUM 経由で MySQL 5.7 をインストールする詳細な手順

1. インストールパッケージを保存する場所に移動しますcd /home/lnmp 2. MySQL ...

JavaScriptでカレンダー効果を素早く実装

この記事では、カレンダー効果を素早く実現するためのJavaScriptの具体的なコードを例として紹介...

JavaScript 操作要素の例

操作要素の詳細については、前回の記事を参照してください。JavaScript WebAPI、DOM、...

vue3.0 のウォッチ リスナーの例の詳細な説明

目次序文リスナーと計算プロパティの違いvue3 で watch を使用するにはどうすればいいですか?...

MySQLで適切なインデックスを選択する方法

まずは栗を見てみましょう EXPLAIN select * from employees where...

njs モジュールを使用して nginx 構成に js スクリプトを導入する

目次序文1. NJSモジュールをインストールする方法1: NJSモジュールを動的にロードする方法2:...

Vueのv-onパラメータの問題についてお話しましょう

Vue での v-on:clock の使用現在、vue.js フレームワークを学習しています。後で参...

WeChatアプレットは左にスワイプしてリスト項目を削除する効果を実現

この記事では、WeChatミニプログラムの具体的なコードを共有し、左にスワイプしてリスト項目を削除す...

Linux での MySQL 5.6.27 インストール チュートリアル

この記事では、LinuxでのMySQL 5.6.27のインストールチュートリアルを参考までに紹介しま...

シンプルな時計を実装するJavaScript

この記事では、JavaScriptでシンプルな時計を実装するための具体的なコードを参考までに紹介しま...

MySql 5.7.21 無料インストール バージョンの構成方法 (Win10 の場合)

1.インストールしたい場所に解凍し、my.iniファイルを作成します。 my.iniの内容は次のと...

js で下線とキャメルケースの変換を実装する (複数の方法)

目次適用シナリオ:方法 1: 正規表現 (推奨)方法2: 配列のreduceメソッドを使用する方法3...