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

推薦する

CSS中級者向けアダプティブレイアウトの5つのソリューションの詳細な説明

序文ページを作っていく上で、ページレイアウトに関する内容に遭遇することが多く、面接でも聞かれることも...

SQL インジェクションの詳細

1. SQL インジェクションとは何ですか? SQL インジェクションは、入力パラメータに SQL ...

MySQLにおける(JOIN/ORDER BY)文のクエリ処理と最適化方法

EXPLAIN ステートメントは、MySQL クエリ ステートメント プロセスと EXPLAIN ス...

優れたユーザー インターフェース デザインのための 37 のヒント (画像付き)

1. 複数列レイアウトではなく、単一列レイアウトを使用する1 列のレイアウトにより、全体的な状況をよ...

MySQLユーザー権限管理の詳細な説明

目次序文: 1. ユーザー権利の概要2. 実際の権限管理序文:データベースのユーザー権限管理について...

.htaccess を使用して特定の IP からの Web サイトへのアクセスを禁止する方法

序文コストを考慮して、ほとんどのウェブマスターは、多数の小規模なウェブサイト用にサーバーを個別に購入...

Mysql-connector-java ドライバのバージョン問題の概要

Mysql-connector-java ドライバのバージョンの問題私のデータベースのバージョンは ...

CentOS 8 カスタム ディレクトリ インストール nginx (チュートリアルの詳細)

1. ツールとライブラリをインストールする# PCRE は、Perl 互換の正規表現ライブラリを含...

Flutterを使用して移動可能なスタックウィジェット機能を作成する

この投稿では、キャンバスとドラッグ可能なノード インターフェースを使用するデスクトップおよび Web...

ByteDance インタビュー: JS を使用して Ajax 同時リクエスト制御を実装する方法

序文正直に言うと、最近とても混乱していると感じています。テクノロジーと人生について。また、将来の発展...

MySQLの高可用性アーキテクチャの詳細な説明

目次導入MySQL 高可用性マスター 1 つとバックアップ 1 つ: MySQL マスター スレーブ...

あなたが知らない Linux KDE アプリケーション 11 選

翻訳Kool Desktop Environment の略称。 Linux、Unix、FreeBSD...

MySQL からエクスポートされた scv ファイル内の文字化けやジャンプ行の問題をすばやく解決します

仕事上の理由により、完全なオンライン化(​​つまり、すべてのデータがオンラインで完了し、インポートや...

マークアップ言語 - CSS レイアウト

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Webフロントエンドスキル概要(個人の実務経験)

1. 今日、ページを作っているときに、矢印を中央に配置する効果に遭遇しました。クリック領域を大きくし...