MySQL を頻繁に使用する人は、次のような状況に遭遇する可能性があります。 1. フィールド タイプが null ではないのに、null 値を挿入できるのはなぜですか? 2. null でない方が null より効率的なのはなぜですか? 3. フィールドが空でないかどうかを判断する際に、何を使用するか 列 <> '' のテーブルから * を選択 まだ使用する必要がある 列が null でないテーブルから * を選択します 上記の質問を念頭に置いて、null と not null の違い、それらの違いは何なのか、そしてそれぞれの効率性の問題について簡単に調べてみましょう。 まず、「null 値」と「NULL」の概念を明確にする必要があります。 1. 空の値はスペースを占有しません 2. MySQLのNULLは実際にスペースを占有します。以下はMYSQLの公式説明です。
たとえば、カップがある場合、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 エラー: もうひとつ `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 をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: 携帯電話番号の歩数記録を取得するWeChatアプレット
>>: VMware12 に CentOS8 をインストールする方法 (VM 仮想マシンに CentOS8 をインストールするチュートリアル)
導入近年、TypeScript を求める声がますます高まり、TypeScript はフロントエンドに...
React は Vue とは異なります。ルートにメタ文字を設定することでルートインターセプションを実...
インタビュアー: Vue のソースコードを読んだことはありますか?応募者:あります。インタビュアー:...
メタを使用して、ページの時間指定更新またはジャンプを実装します。 XML/HTML コードコンテンツ...
序文アプリケーション シナリオ: おそらく、内部 Web サイトは外部ユーザーにアクセス可能である必...
リンクインスタイルとは、すべてのスタイルを 1 つ以上の外部スタイルシート ファイルに配置することで...
1. Apacheサーバーのインストールと設定yum インストール httpd -y systemc...
目次1. キャラクター文法パラメータ索引戻り値2. 連結文法パラメータ文字列2 [, …文字列N]戻...
この記事では、GobangゲームのWebバージョンを実装するためのJavaScriptの具体的なコー...
この記事は、透明度を変えてカルーセルにするXiaomiカルーセルを真似て書いたものです。初心者なので...
ローカルの MySQL バージョンが比較的低いため、最近 MySQL のバージョンをアップグレードす...
HTML は、World Wide Web 上で公開するために使用されるハイブリッド言語です。 XH...
「.zip」形式は、Windows システムでファイルを圧縮するために使用されます。実際、「.zip...
HTML はプレゼンテーションからコンテンツへの移行を試みており、コンテンツの意味(HTML) とプ...
序文最近、オンラインでデータが誤って操作されました。データベースが直接変更されたため、それを回復する...