Detaillierte Erklärung des Unterschieds zwischen MySQL null und nicht null und null und leerem Wert ''''

Detaillierte Erklärung des Unterschieds zwischen MySQL null und nicht null und null und leerem Wert ''''

Ich glaube, dass vielen Leuten, die MySQL schon lange verwenden, die Konzepte dieser beiden Feldattribute immer noch nicht ganz klar sind und sie im Allgemeinen die folgenden Fragen haben:

  • Mein Feldtyp ist nicht null. Warum kann ich einen Nullwert einfügen?
  • Warum ist null nicht effizienter als null?
  • Um zu beurteilen, ob ein Feld nicht leer ist, sollten wir „select * from table where column <> ''“ oder „select * from table where column is not null“ verwenden?

Lassen Sie uns vor dem Hintergrund der oben genannten Fragen einen genaueren Blick auf die Unterschiede zwischen „null“ und „nicht null“ werfen.
Zunächst müssen wir die Konzepte „Nullwert“ und „NULL“ klären:

  • Leere Werte nehmen keinen Platz ein.
  • NULL nimmt in MySQL tatsächlich Platz ein. Das Folgende ist eine offizielle Erklärung von MySQL:

„NULL-Spalten benötigen zusätzlichen Platz in der Zeile, um aufzuzeichnen, ob ihre Werte NULL sind. Bei MyISAM-Tabellen benötigt jede NULL-Spalte ein zusätzliches Bit, aufgerundet auf das nächste Byte.“

Wenn Sie beispielsweise eine Tasse haben, bedeutet ein Nullwert, dass sich in der Tasse ein Vakuum befindet, und NULL bedeutet, dass die Tasse mit Luft gefüllt ist. Obwohl die Tassen leer aussehen, ist der Unterschied enorm.

Nachdem wir die Begriffe „Nullwert“ und „NULL“ geklärt haben, ist das Problem im Grunde klar. Machen wir ein Beispiel, um es zu testen:

CREATE TABLE `test` ( 
 `col1` VARCHAR( 10 ) ZEICHENSATZ utf8 COLLATE utf8_general_ci NICHT NULL , 
 `col2` VARCHAR( 10 ) ZEICHENSATZ utf8 COLLATE utf8_general_ci NULL 
) ENGINE = MYISAM; 

Daten einfügen:

INSERT INTO `test` VALUES (null,1); 

MySQL-Fehler:

#1048 - Spalte „col1“ kann nicht null sein

Noch eine

INSERT INTO `test` VALUES ('',1);

Erfolgreich eingefügt.

Es ist ersichtlich, dass in das Feld NOT NULL nicht „NULL“ eingefügt werden kann, sondern nur „Nullwert“. Die Antwort auf Frage 1 oben ist ebenfalls verfügbar.

Zu Frage 2 haben wir oben bereits gesagt, dass NULL eigentlich kein Nullwert ist, aber Platz einnimmt. Wenn MySQL Vergleiche durchführt, nimmt NULL daher am Feldvergleich teil, was einige Auswirkungen auf die Effizienz hat.
Darüber hinaus speichern B-Baum-Indizes keine NULL-Werte. Wenn das indizierte Feld also NULL sein kann, sinkt die Effizienz des Index erheblich.

Fügen wir noch einige Daten in die Testtabelle ein:

INSERT INTO `test` VALUES ('', NULL); 
INSERT INTO `test` VALUES ('1', '2'); 

Nun die Daten in der Tabelle:

Jetzt möchte ich gemäß den Anforderungen alle Daten in der Testtabelle zählen, bei denen col1 nicht leer ist. Soll ich „<> ''“ oder „IS NOT NULL“ verwenden? Schauen wir uns den Unterschied in den Ergebnissen an.

Wählen Sie * aus `test`, wobei col1 nicht NULL ist

Wählen Sie * aus `test`, wobei col1 <> ''

Wie Sie sehen, sind die Ergebnisse sehr unterschiedlich. Daher müssen wir basierend auf den Geschäftsanforderungen herausfinden, welche Suchkriterien zu verwenden sind.

MySQL empfiehlt, dass Spaltenattribute so oft wie möglich NOT NULL sind

Längenprüfung: Beachten Sie, dass zwischen den leeren Werten kein Leerzeichen steht.

mysql> wähle Länge(''), Länge(null), Länge(' ');

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

| Länge('') ​​| Länge(null) | Länge(' ') |

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

| 0 | NULL | 2 |

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

Notiz:

  • Wenn beim Zählen der Anzahl der Datensätze in einer Spalte mit count() ein NULL-Wert verwendet wird, ignoriert das System diesen automatisch, der Null-Wert wird jedoch gezählt.
  • Um NULL zu ermitteln, verwenden Sie IS NULL oder IS NOT NULL. In der SQL-Anweisungsfunktion können Sie die Funktion ifnull() verwenden, um sie zu verarbeiten. Um das Nullzeichen zu ermitteln, verwenden Sie ='' oder <>'', um es zu verarbeiten.
  • Besondere Hinweise für MySQL: Wenn Sie beim Zeitstempel-Datentyp einen NULL-Wert in eine Spalte dieses Datentyps einfügen, ist der angezeigte Wert die aktuelle Systemzeit. Wenn Sie einen Nullwert eingeben, wird 0000-00-00 00:00:00 angezeigt.
  • Ob zur Beurteilung des Nullwerts „null“ oder „=“ verwendet werden soll, sollte je nach tatsächlichem Geschäft unterschieden werden.

Damit ist dieser Artikel über die Unterschiede zwischen MySQL null und nicht null und zwischen null und leerem Wert '''' abgeschlossen. Weitere Informationen zu MySQL null und nicht null finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Warum sollten MySQL-Felder NOT NULL verwenden?
  • Lösen Sie das Problem, dass MySQL „not in“ verwendet, um Nullwerte einzuschließen
  • Lösen Sie das Problem, dass bei der Set-Operation kein NULL gefunden wird, nicht wie bei MySQL
  • Detaillierte Erklärung zur Verwendung von NULL und NOT NULL beim Erstellen von Tabellen in MySQL
  • Lösung für das Problem der Nullspalte in der NOT IN-Füllgrube in MySQL
  • Sollten nullbare Felder in MySQL auf NULL oder NOT NULL gesetzt werden?
  • MySQL-Abfrage für leere oder nicht leere Felder (ist null und nicht null)
  • mysql nicht drin, linker Join, IST NULL, EXISTIERT NICHT Effizienzproblem-Datensatz
  • Erläuterung des MySQL-Nicht-Null-Einschränkungsfalls

<<:  Vue implementiert den Anruf der PC-Kamera, um Fotos in Echtzeit aufzunehmen

>>:  Analyse des Funktionsprinzips und des Implementierungsprozesses von Docker Hub

Artikel empfehlen

Umfassende Analyse von Prototypen, Prototypobjekten und Prototypketten in js

Inhaltsverzeichnis Prototypen verstehen Prototypo...

Einführung in das Methodenattribut des Formularformulars in HTML

1 Methode ist eine Eigenschaft, die angibt, wie Da...

Fallstudie zum Unterschied zwischen JavaScript parseInt() und Number()

Lernziele: Die beiden Funktionen parseInt() und N...

Detaillierte Erklärung der Vue-Filter

<Text> <div id="Wurzel"> &l...

So exportieren Sie die MySQL-Tabellenstruktur nach Excel

Die Voraussetzungen sind wie folgt Exportieren Si...

Eine Sammlung möglicher Probleme bei der Migration von SQLite3 nach MySQL

Kurzbeschreibung Passend für Leser: Mobile Entwic...

Reagieren Sie auf die Verarbeitung von Fehlergrenzkomponenten

Dies ist der Inhalt von React 16. Es ist nicht di...

Untersuchung der Eingabetastenfunktion vom Typ „Datei“

<br />Beim Hochladen auf manchen Websites wi...

WeChat-Applet implementiert Formularüberprüfung

Validierung des WeChat-Applets-Formulars. Zu Ihre...

Lösung für das Problem, dass Centos8 Docker nicht installieren kann

Problem [root@zh ~]# [root@zh ~]# [root@zh ~]# yu...

8 Tipps für Vue, die Sie nach dem Lesen lernen werden

1. Verwenden Sie immer :key in v-for Die Verwendu...