MySQL を長期間使用している人の多くは、これら 2 つのフィールド属性の概念についてあまり明確ではないと思いますが、彼らは一般に次のような疑問を抱いています:
私のフィールド タイプは null ではないのですが、なぜですかnull 値を挿入できますか?
null よりも null の方が効率的である理由
フィールドが空ではないと判断する場合、列 <> が存在するテーブルから * を選択する必要があります。 '' または、列がまだ null ではない select * from table を使用する必要があります。
上記の質問を踏まえて、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 サイトの他の関連記事を参照してください。