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 ワンライナー

推薦する

MySQL Strict Modeの知識ポイントの詳細な説明

I. 厳密モードの説明MySQL 5.0 以降の厳密モード (STRICT_TRANS_TABLES...

Docker MySQLコンテナデータベースへの変更が有効にならない問題を解決する

公式の MySQL イメージを使用するには、構成ファイル、DB データ ファイル ディレクトリなどの...

CentOS 7 での mysql 5.7 のインストール チュートリアル

1. 公式MySQL Yumリポジトリをダウンロードしてインストールする 実行ファイル: mysql...

モバイルプラットフォーム開発におけるメタタグの適用の詳細な説明

デスクトップ プラットフォームの Web レイアウトのメタ タグは誰もがよく知っています。これは常に...

mysql における mydumper と mysqldump の比較

いくつかのテーブルまたは単一のデータベースのみをバックアップする場合は、innobackup よりも...

Windows で MySQL 5.7.17 をインストールし、エンコードを utf8 に設定する方法

ダウンロードMySQL 公式ダウンロード、Windows (x86、64 ビット)、ZIP アーカイ...

nginx と Tencent Cloud の無料証明書を使用して https を作成する方法

httpsを取得する方法を勉強しています。最近、Tencent Cloud が提供する無料の SSL...

Linuxで環境変数を削除する詳細な手順

Linuxで環境変数を削除するには?unsetコマンドを使用してすぐに削除します1. Linuxクラ...

MySQL が innobackupex を使用して接続サーバーをバックアップできない場合の解決策

innobackupex を使用してバックアップする際に MySQL がサーバーに接続できない場合は...

ゲームの Node.JS バージョンを作成する方法

目次概要ビルドプロセス関連APIリードライン基本的な使い方チョーククリア手順に関する追加情報完全なコ...

一般的なMysql DDL操作の概要

図書館管理ライブラリを作成する データベースを作成します [存在しない場合] ライブラリ名;ライブラ...

任意の長さの配列を作成または埋めるための JS のヒントの要約

目次序文直接充填方式for ループの push() メソッド配列コンストラクタメソッド配列コンストラ...

モバイル開発における 1px ラインの理解と解決策

1pxの線が太くなる理由モバイルプロジェクトに取り組むとき、設計図に従って要素ノードのサイズとスタイ...

JS for ループで setTimeout を使用する 4 つのソリューション

目次概要解決策 1: クロージャ解決策2: 構造を分割する解決策3:解決策4: setTimeout...

Linux カーネル デバイス ドライバー Linux カーネル 基本メモの概要

1. Linuxカーネルドライバモジュールの仕組み静的ロードでは、ドライバモジュールをカーネルにコン...