Sollten nullbare Felder in MySQL auf NULL oder NOT NULL gesetzt werden?

Sollten nullbare Felder in MySQL auf NULL oder NOT NULL gesetzt werden?

Personen, die MySQL häufig verwenden, können mit den folgenden Situationen konfrontiert werden:

1. Mein Feldtyp ist nicht null. Warum kann ich einen Nullwert einfügen?

2. Warum ist nicht null effizienter als null?

3. Was sollte verwendet werden, um zu beurteilen, ob ein Feld nicht leer ist?

Wählen Sie * aus der Tabelle, in der die Spalte <> ''

Muss noch verwendet werden

Wählen Sie * aus der Tabelle aus, in der die Spalte nicht null ist

Lassen Sie uns unter Berücksichtigung der oben genannten Fragen kurz den Unterschied zwischen „null“ und „nicht null“ untersuchen, was der Unterschied zwischen ihnen ist und welche Effizienzprobleme sie jeweils haben.

Zunächst müssen wir die Konzepte „Nullwert“ und „NULL“ klären:

1. Leere Werte nehmen keinen Platz ein

2. NULL in MySQL nimmt 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. Lassen Sie uns es anhand eines Beispiels testen:

Tabelle „Codetc“ erstellen ( 
`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 `codetc` VALUES (null,1);

MySQL-Fehler:

#1048 - Column 'col1' cannot be null

Noch eine

INSERT INTO `codetc` 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 ein paar weitere Daten in die Codetc-Tabelle ein:

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

Jetzt möchte ich gemäß den Anforderungen alle Daten in der Codetc-Tabelle 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 „Codetc“, wobei Spalte1 nicht NULL ist.

Wählen Sie * aus `codetc`, wobei col1 <> '' ist;

Wie Sie sehen, sind die Ergebnisse ganz unterschiedlich. Daher müssen wir in tatsächlichen Situationen je nach Geschäftsanforderungen herausfinden, ob wir null verwenden müssen oder nicht.

Hinweis: MySQL-Felder versuchen, NULL zu vermeiden. Sie sollten die Spalte als NOT NULL angeben, es sei denn, Sie möchten NULL speichern. In MySQL sind Spalten mit Nullwerten schwer abzufragen, und NULL-Werte werden beim Indizieren einer Tabelle nicht gespeichert. Wenn das indizierte Feld daher NULL sein kann, sinkt die Effizienz des Index erheblich. Weil sie Indizes, Indexstatistiken und Vergleichsoperationen komplexer machen. Sie sollten Nullwerte durch 0, einen Sonderwert oder eine leere Zeichenfolge ersetzen.

MySQL setzt Feld ungleich null auf null

Stellungnahme:

ALTER TABLE Tabellenname MODIFY Feldname VARCHAR(20) DEFAULT NULL 

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

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 des Unterschieds zwischen MySQL null und nicht null und null und leerem Wert''''''''
  • 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
  • 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

<<:  WeChat-Applet zum Abrufen eines Schrittdatensatzes für Mobiltelefonnummern

>>:  So installieren Sie CentOS8 in VMware12 (Tutorial zur Installation von CentOS8 in einer virtuellen VM-Maschine)

Artikel empfehlen

Vue implementiert die richtige Slide-Out-Layer-Animation

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Analyse des binlog_format-Modus und der Konfiguration in MySQL

Es gibt drei Hauptmethoden der MySQL-Replikation:...

Beispiel zum Anzeigen und Ändern der MySQL-Transaktionsisolationsebene

Überprüfen Sie die Transaktionsisolationsebene In...

Tutorial: Nginx-Reverse-Proxy-Konfiguration zum Entfernen von Präfixen

Wenn Sie nginx als Reverse-Proxy verwenden, könne...

Vollständige Schritte zur Deinstallation der MySQL-Datenbank

Der Vorgang zur vollständigen Deinstallation der ...

Mein CSS-Framework – base.css (Browser-Standardstil zurücksetzen)

Code kopieren Der Code lautet wie folgt: @Zeichen...

So zeigen Sie den Datenbankinstallationspfad in MySQL an

Wir können den Installationspfad von MySQL über d...

Vue3+Skript-Setup+ts+Vite+Volar-Projekt

Inhaltsverzeichnis Erstellen Sie ein Vue + TS-Pro...

Tutorial zur Installation und Konfiguration der Version MySQL 5.7.23

Ich habe drei Stunden gebraucht, um MySQL selbst ...

Lösung für Nginx-Installationsfehler

1. Entpacken Sie nginx-1.8.1.tar.gz 2. Entpacken ...

Umfassendes Verständnis von HTML-Formularelementen

Wie unten dargestellt: XML/HTML-CodeInhalt in die...

Vue Storage enthält eine Lösung für Boolesche Werte

Vue speichert Speicher mit Booleschen Werten Ich ...

JavaScript zum Erzielen eines einfachen Countdown-Effekts

In diesem Artikelbeispiel wird der spezifische Co...

Handbuch zur MySQL-Volltextindizierung

Die Volltextindizierung erfordert eine spezielle ...