MySQL はフィールドが null かどうかをどのように判断するのでしょうか?

(*-*)浩
リリース: 2020-09-10 16:11:36
オリジナル
8379 人が閲覧しました

MySQL を長期間使用している人の多くは、これら 2 つのフィールド属性の概念についてあまり明確ではないと思いますが、彼らは一般に次のような疑問を抱いています:

私のフィールド タイプは null ではないのですが、なぜですかnull 値を挿入できますか?

null よりも null の方が効率的である理由

フィールドが空ではないと判断する場合、列 <> が存在するテーブルから * を選択する必要があります。 '' または、列がまだ null ではない select * from table を使用する必要があります。

MySQL はフィールドが null かどうかをどのように判断するのでしょうか?

上記の質問を踏まえて、null と not null の違いを詳しく見てみましょう。

まず第一に、「null 値」と「NULL」の概念を理解する必要があります。

null 値はスペースを占有しません

mysql の NULL は実際にスペースを占有します、以下は MYSQL からの公式説明です:

「値が NULL かどうかを記録するために、NULL 列には行に追加のスペースが必要です。MyISAM テーブルの場合、各 NULL 列は 1 ビット余分に取り、次のように切り上げられます。」 "

たとえば、カップがあります。NULL 値はカップが真空であることを意味し、NULL はカップが空気で満たされていることを意味します。カップは空に見えますが、その違いは大きいです。

「NULL 値」と「NULL」の概念を理解すると、問題は基本的に明確になります。例を使ってテストしてみましょう:

CREATE TABLE  `test` (  
 `col1` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,  
 `col2` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL  
) ENGINE = MYISAM ;
ログイン後にコピー

データの挿入:

INSERT INTO `test` VALUES (null,1);
ログイン後にコピー

Mysql エラーが発生しました:

#1048 - Column 'col1' cannot be null
ログイン後にコピー

別の

INSERT INTO `test` VALUES ('',1);
ログイン後にコピー

が正常に挿入されました。

NOT NULL フィールドに「NULL」を挿入することはできず、「NULL 値」のみを挿入できることがわかり、上記の質問には答えがあります。

問題点としては、上で述べたように、NULL は実際には null 値ではなく、領域を占有するため、mysql が比較を実行する際に、NULL がフィールド比較に参加するため、部分的に影響が生じます。効率。

そして B ツリー インデックスは NULL 値を格納しないため、インデックス付けされたフィールドが NULL になる可能性がある場合、インデックス効率が大幅に低下します

MYSQL では、列属性をできる限り NOT NULL にすることをお勧めします

長さの検証: NULL 値の '' の間にスペースがないことに注意してください。

mysql> select length(''),length(null),length(' ');

+------------+--------------+--------------+

| length('') | length(null) | length(' ') |

+------------+--------------+--------------+

| 0 | NULL | 2 |

+------------+--------------+--------------+
ログイン後にコピー

注:

count() を使用して列内のレコード数をカウントする場合、NULL 値が使用されると、システムは自動的にそれを無視します。ただし、NULL 値が使用された場合、システムは自動的にそれを無視し、その値がカウントされます。

NULL を判定するには、IS NULL または IS NOT NULL を使用します。SQL 文関数の ifnull() 関数を使用して処理できます。NULL 文字を判定するには、='' または <>'' を使用して、 process

MySQL に関する特別な考慮事項、タイムスタンプ データ型に関して、このデータ型に挿入された列に NULL 値が挿入された場合、表示される値は現在のシステム時刻になります。 null 値を挿入した場合は、「0000-00-00 00:00:00

」と表示されます。null 値の判定に is null を使用するか ='' を使用するかは、実際の業務によって異なります。

以上がMySQL はフィールドが null かどうかをどのように判断するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート