MySQL の null 可能フィールドは NULL に設定する必要がありますか、それとも NOT NULL に設定する必要がありますか?

MySQL の null 可能フィールドは NULL に設定する必要がありますか、それとも NOT NULL に設定する必要がありますか?

MySQL を頻繁に使用する人は、次のような状況に遭遇する可能性があります。

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

2. null でない方が null より効率的なのはなぜですか?

3. フィールドが空でないかどうかを判断する際に、何を使用するか

列 <> '' のテーブルから * を選択

まだ使用する必要がある

列が null でないテーブルから * を選択します

上記の質問を念頭に置いて、null と not null の違い、それらの違いは何なのか、そしてそれぞれの効率性の問題について簡単に調べてみましょう。

まず、「null 値」と「NULL」の概念を明確にする必要があります。

1. 空の値はスペースを占有しません

2. MySQLのNULLは実際にスペースを占有します。以下はMYSQLの公式説明です。

「NULL 列には、その値が NULL であるかどうかを記録するために行に追加のスペースが必要です。MyISAM テーブルの場合、各 NULL 列は 1 ビット余分に必要となり、最も近いバイトに切り上げられます。」

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

「null 値」と「NULL」の概念を明確にすると、問題は基本的に明らかになります。例を実行してテストしてみましょう。

テーブル `codetc` を作成します ( 
`col1` VARCHAR( 10 ) 文字セット utf8 COLLATE utf8_general_ci NOT NULL , 
`col2` VARCHAR( 10 ) 文字セット utf8 COLLATE utf8_general_ci NULL 
) エンジン = MYISAM ;

データを挿入:

`codetc` に値 (null,1) を挿入します。

MySQL エラー:

#1048 - Column 'col1' cannot be null

もうひとつ

`codetc` に値 ('',1) を挿入します。

正常に挿入されました。

NOT NULLフィールドには「NULL」を挿入できず、「null値」のみ挿入できることがわかります。上記の質問1の回答も利用可能です。

質問 2 に関して、NULL は実際には null 値ではないが、スペースを占有するということをすでに上で述べました。したがって、MySQL が比較を行うと、NULL がフィールド比較に参加し、効率にいくらか影響を及ぼします。

さらに、B ツリー インデックスには NULL 値が保存されないため、インデックス フィールドが NULL になる可能性がある場合、インデックスの効率は大幅に低下します。

codetc テーブルにさらにいくつかのデータを挿入してみましょう。

`codetc` に値 ('', NULL) を挿入します。
`codetc` に値 ('1', '2') を挿入します。

ここで、要件に従って、codetc テーブル内の col1 が空でないすべてのデータをカウントします。「<> ''」と「IS NOT NULL」のどちらを使用すればよいでしょうか。結果の違いを見てみましょう。

SELECT * FROM `codetc` WHERE col1 IS NOT NULL;

SELECT * FROM `codetc` WHERE col1 <> '';

ご覧のとおり、結果はかなり異なるため、実際の状況では、ビジネスニーズに基づいて null を使用する必要があるか、not null を使用する必要があるかを判断する必要があります。

注意: MySQL フィールドは NULL を避けようとするため、NULL を保存する場合を除き、列を NOT NULL として指定する必要があります。 MySQL では、NULL 値を含む列はクエリが難しく、テーブルのインデックス作成時に NULL 値は保存されません。そのため、インデックス作成フィールドが NULL になる可能性がある場合、インデックスの効率が大幅に低下します。インデックス、インデックス統計、比較操作がより複雑になるためです。 null 値は 0、特殊な値、または空の文字列に置き換える必要があります。

mysql はフィールドを null に設定しません

声明:

ALTER TABLE テーブル名 MODIFY フィールド名 VARCHAR(20) DEFAULT NULL 

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL フィールドで NOT NULL を使用する必要があるのはなぜですか?
  • MySQL で not in を使用して null 値を含める問題を解決する
  • 設定操作からMySQLへのNULLが見つからない問題を解決する
  • MySQL の null と not null、null と空の値の違いの詳細な説明''''''''
  • MySQL でテーブルを作成するときの NULL と NOT NULL の使用方法の詳細な説明
  • MySQL の NOT IN 充填ピットの NULL 列の問題の解決方法
  • MySQL クエリの空のフィールドまたは空でないフィールド (null または null ではない)
  • mysql は、含まれていない、左結合、IS NULL、NOT EXISTS の効率の問題のレコードです
  • MySQL の null 制約のケースの説明

<<:  携帯電話番号の歩数記録を取得するWeChatアプレット

>>:  VMware12 に CentOS8 をインストールする方法 (VM 仮想マシンに CentOS8 をインストールするチュートリアル)

推薦する

JS ベースの Ajax 同時リクエスト制御を実装する方法

目次序文Ajax シリアルおよびパラレルAjaxの同時リクエスト制御のための2つのソリューションPr...

ワンクリックで雨や雪のエフェクトを実現する ThingJS パーティクルエフェクト

目次1. パーティクルエフェクト2. シーンを読み込む3. さまざまな粒子効果の実現エンディング: ...

WeChat アプレットのカスタム下部ナビゲーション バー コンポーネント

この記事の例では、WeChatアプレットの下部ナビゲーションバーコンポーネントの具体的な実装コードを...

CSS -webkit-box-orient: コンパイル後に垂直プロパティが失われる

1. 原因要件は 2 行を表示することであり、余分なテキストは 3 つのドットに置き換えられるため、...

Linux whatisコマンドの使い方

01. コマンドの概要whatis コマンドは、システム コマンドの簡単な説明を含むいくつかの特別な...

良いデザインについて

<br />「良いデザインとは何か」と答える 1 万人に対して、少なくとも 1 万 1 ...

クールな点滅アラームボタンをおすすめします

効果は以下のとおりです。 コードは次のとおりです (クリックすると展開してソース コードが表示されま...

HTML の一般的でないタグ optgroup、sub、sup、bdo のサンプルコード

Optgroup は、ドロップダウン リストのコンテンツをより整理するために、select タグで使...

Sublime Text - ブラウザのショートカットキーを設定するための推奨方法

コード効果を異なるブラウザで表示することはよくあることなので、異なるショートカットキーを使用して対応...

HTML 選択タグにリンクを追加する 3 つの方法

最初のもの:コードをコピーコードは次のとおりです。 <html> <ヘッド>...

Docker-compose を使用して GitLab をデプロイする方法

Docker-compose は GitLab をデプロイします1. Dockerをインストールする...

vue-video-player でのブレークポイント再開の実装

最近のプロジェクトでは、ブレークポイントからビデオの再生を再開する機能を実装する必要がありました。こ...

Nginx リバースプロキシの例の詳細な説明

1. リバースプロキシの例1 1. 効果を達成する(1)ブラウザを開き、www.123.comと入力...

React プロジェクトにおける axios カプセル化と API インターフェース管理の詳細な説明

目次序文インストール導入環境の切り替え傍受を要求するレスポンスインターセプションAPIの統合管理要約...

JSベースの手持ち連射機能+テキスト揺れ特殊効果コードの簡単実装

少し前にTikTokで揺れる連打が流行っていたので真似してみることにしました。さっそく効果をみてみま...