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

推薦する

webpackが静的リソースキャッシュを実装する方法

目次導入複数の異なるハッシュを区別するハッシュチャンクハッシュコンテンツハッシュjs キャッシュの実...

KVM ベースの SRIOV パススルー構成とパフォーマンス テストの詳細な説明

SRIOVの導入、VFパススルー構成、パケット転送速度性能テスト目次1. SRIOVの紹介2. 環境...

Linux で Oracle データベースをバックアップするためのスケジュールされたタスクの設定に関するチュートリアル

1. データベースの文字セットを確認するデータベースの文字セットは、Linux で設定された環境変数...

JavaScript ベースのパスワード ボックス検証情報の実装

この記事では、パスワードボックスの検証情報を実装するためのJavaScriptの具体的なコードを例と...

ルート変更を監視するJavaScriptの詳細な説明

目次歴史pushState() メソッドpushState() の使用シナリオreplaceStat...

DBeaver を MySQL バージョン 8 以降に接続し、起こりうる問題を解決する方法の詳細な説明

データベース MySQL バージョン 8.0.18 DBeaver.exeをダウンロードするダウンロ...

Vue の長いリストをすばやく読み込む方法

目次背景メインコンテンツ1. コンポーネントの比較2. 実装のアイデア3. キーメソッドソースコード...

JavaScriptの詳細な説明 thisキーワード

目次1. はじめに2.これを理解する3. これは誰ですか? 4.矢印関数はさらに読む要約する1. は...

NodeJSのモジュール性に関する詳細な説明

目次1. はじめに2. 本文2.1 モジュールとは何ですか? 2.2 解決2.3、require.r...

MySQL サービスを起動できない問題の解決策を含む MySQL 5.7.17 インストール チュートリアル

.net 開発に関しては、Microsoft の SQL Server データベースに精通しており、...

Docker で nginx のログレベルを調整する方法

目次はじめにNginx Dockerファイル新しい会議もっと参考文献はじめに最近、アプリケーションの...

Linux 仮想ホストで SourceGuardian (sg11) 暗号化コンポーネントを有効にする詳細な手順

注: sg11 弊社では Linux システム仮想ホストのセルフインストールのみサポートしております...

Vue で $props、$attrs、$listeners を使用する方法の詳細な説明

目次背景1. 文書の説明2. 特定の用途結論背景ここで、状況について説明しましょう。親コンポーネント...

Tomcat サーバー入門の超詳細なチュートリアル

目次1. Tomcat の概念–1、サーバー–2、ウェブサーバー–3、Tomcatサーバー次にTom...

入力ボックスのプレースホルダーアニメーションと入力検証を実現する純粋なCSS

さらに興味深いコンテンツについては、https://github.com/abc-club/free...