Detaillierte Analyse des MySQL-Datentyps DECIMAL

Detaillierte Analyse des MySQL-Datentyps DECIMAL

Vorwort:

Wenn wir Dezimalzahlen speichern müssen und Genauigkeitsanforderungen haben, wie z. B. das Speichern von Beträgen, ziehen wir normalerweise die Verwendung des DECIMAL-Feldtyps in Betracht. Vielleicht haben die meisten Studenten nur ein geringes Verständnis des DECIMAL-Typs und die Details sind nicht sehr klar. Dieser Artikel beginnt bei Null und informiert Sie über die Verwendungsszenarien und Methoden des DECIMAL-Feldtyps.

1. Einführung in den DECIMAL-Typ

DECIMAL wurde in MySQL 5.1 eingeführt. Die Spaltendeklarationssyntax ist DECIMAL(M,D). NUMERIC ist gleichbedeutend mit DECIMAL. Wenn der Feldtyp als NUMERIC definiert ist, wird er automatisch in DECIMAL konvertiert.

Bei der Deklarationssyntax DECIMAL(M,D) ergeben sich folgende Wertebereiche der unabhängigen Variablen:

  • M ist die maximale Anzahl von Ziffern (Genauigkeit) und liegt zwischen 1 und 65. Dieser Wert kann nicht angegeben werden. Der Standardwert ist 10.
  • D ist die Anzahl der Ziffern rechts vom Dezimalpunkt (Dezimalstellen). Der Bereich liegt zwischen 0 und 30 und kann nicht größer als M sein. Der Wert kann nicht angegeben werden und der Standardwert ist 0.

Beispielsweise kann das Feld „Gehalt“ DECIMAL(5,2) jeden beliebigen Wert mit fünf Ziffern und zwei Dezimalstellen speichern, sodass der Wertebereich, der in der Spalte „Gehalt“ gespeichert werden kann, von -999,99 bis 999,99 reicht.

2. Tatsächliche Verwendung von DECIMAL

Als nächstes erstellen wir eine Testtabelle, um die Verwendung des Feldtyps DECIMAL zu überprüfen:

# Erstellen Sie eine Tabelle mit einem DECIMAL-Feld und überprüfen Sie, dass der Standardwert decimal(10,0) ist.
mysql> Tabelle erstellen decimal_tb (Spalte1 Dezimal,Spalte2 Dezimal(5,2));
Abfrage OK, 0 Zeilen betroffen (0,04 Sek.)
mysql> zeigen erstellen Tabelle decimal_tb\G
*************************** 1. Reihe ***************************
    Tabelle: decimal_tb
Tabelle erstellen: CREATE TABLE `decimal_tb` (
 `col1` decimal(10,0) DEFAULT NULL,
 `col2` Dezimalzahl (5,2) STANDARD NULL
) ENGINE=InnoDB STANDARD-CHARSET=utf8
1 Zeile im Satz (0,00 Sek.)

# Datentest einfügen# Fazit: Bei Überschreitung des Speicherbereichs wird ein Fehler gemeldet. Bei zu geringen Nachkommastellen wird automatisch 0 hinzugefügt. Ist die erste Ziffer 0, wird sie automatisch ignoriert. Überschreiten die Nachkommastellen den Bereich, wird die Zahl gekürzt und gerundet.
mysql> in decimal_tb (col1,col2) Werte einfügen (100,100);
Abfrage OK, 1 Zeile betroffen (0,05 Sek.)
mysql> in decimal_tb (col2) Werte einfügen (1,23);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
mysql> Werte in decimal_tb (col2) einfügen (10.2);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
mysql> in decimal_tb (col2) Werte einfügen (09.9);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)
mysql> wähle * aus decimal_tb;
+------+--------+
| Spalte1 | Spalte2 |
+------+--------+
| 100 | 100,00 |
| NULL | 1,23 |
| NULL | 10.20 |
| NULL | 9,90 |
+------+--------+
4 Zeilen im Satz (0,00 Sek.)
mysql> in decimal_tb (col2) Werte einfügen (9999);
FEHLER 1264 (22003): Wert für Spalte „col2“ in Zeile 1 liegt außerhalb des gültigen Bereichs
mysql> in decimal_tb (col2) Werte einfügen (12.233); 
Abfrage OK, 1 Zeile betroffen, 1 Warnung (0,01 Sek.)
mysql> Warnungen anzeigen;
+-------+------+------------------------------------------+
| Ebene | Code | Nachricht |
+-------+------+------------------------------------------+
| Hinweis | 1265 | Daten für Spalte „col2“ in Zeile 1 abgeschnitten |
+-------+------+------------------------------------------+
1 Zeile im Satz (0,00 Sek.)
mysql> in decimal_tb (col2) Werte einfügen (12.2300);
Abfrage OK, 1 Zeile betroffen (0,01 Sek.)

# Variabler Bereichstest# Schlussfolgerung: M reicht von 1 bis 65, D reicht von 0 bis 30 und D ist nicht größer als M
mysql> Tabelle ändern decimal_tb Spalte hinzufügen col3 decimal(6,6);
Abfrage OK, 0 Zeilen betroffen (0,12 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0
mysql> Tabelle ändern decimal_tb Spalte hinzufügen col4 decimal(6,7); 
FEHLER 1427 (42000): Für float(M,D), double(M,D) oder decimal(M,D) muss M >= D sein (Spalte „col4“).
mysql> Tabelle ändern decimal_tb Spalte hinzufügen col4 decimal(65,2);
Abfrage OK, 0 Zeilen betroffen (0,11 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0
mysql> Tabelle ändern decimal_tb Spalte hinzufügen col4 decimal(66,2);
FEHLER 1426 (42000): Für „col4“ wurde zu große Genauigkeit von 66 angegeben. Das Maximum liegt bei 65.
mysql> Tabelle ändern, decimal_tb, Spalte col5 hinzufügen, decimal(60,30); 
Abfrage OK, 0 Zeilen betroffen (0,13 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0
mysql> Tabelle ändern decimal_tb Spalte hinzufügen col6 decimal(60,31);
FEHLER 1425 (42000): Für Spalte „col6“ wurde ein zu großer Maßstab von 31 angegeben. Das Maximum liegt bei 30.

3. Zusammenfassung der DECIMAL-Verwendung

Der obige Inhalt stellt die Verwendung und Vorsichtsmaßnahmen des DECIMAL-Typs aus praktischer Sicht vor. Möglicherweise kennen Sie auch Gleitkommatypen wie float und double, die auch Dezimalzahlen speichern können, aber ich werde sie hier nicht im Detail vorstellen. Ich möchte Sie nur daran erinnern, dass die Typen float und double keine Genauigkeit gewährleisten können und fehleranfällig sind, insbesondere bei der Durchführung von Summationsberechnungen. Daher wird empfohlen, beim Speichern von Dezimalzahlen den Typ DECIMAL zu verwenden, insbesondere wenn es sich um Beträge handelt. Hier noch einmal zusammengefasst, worauf Sie bei der Verwendung von DECIMAL achten sollten:

  • In DECIMAL(M,D) liegt der Bereich von M zwischen 1 und 65 und der Bereich von D zwischen 0 und 30.
  • Der Standardwert von M ist 10, der Standardwert von D ist 0 und D ist nicht größer als M.
  • Der Speicherbereich von DECIMAL(5,2) reicht von -999,99 bis 999,99. Bei Überschreitung des Speicherbereichs wird ein Fehler gemeldet.
  • Beim Abspeichern von Werten werden nicht genügend Dezimalstellen automatisch mit 0 aufgefüllt bzw. die erste Ziffer, falls sie 0 ist, automatisch ignoriert.
  • Wenn die Zahl die Dezimalstelle überschreitet, wird sie abgeschnitten, ein Alarm generiert und die Zahl aufgerundet.
  • Bei der Verwendung von DECIMAL-Feldern wird empfohlen, die M- und D-Parameter manuell anzugeben und nach Bedarf zuzuordnen.

Zusammenfassen:

Dieser Artikel ist relativ einfach und praktisch. Nach dem Lesen werden Sie wahrscheinlich die Verwendungsszenarien und Vorsichtsmaßnahmen für DECIMAL-Felder verstehen. Tatsächlich müssen wir für gängige Feldtypen nur ihre Verwendungsszenarien und Vorsichtsmaßnahmen verstehen. Wenn wir eine Tabelle erstellen, besteht unser Ziel darin, schnell den geeigneten Feldtyp auswählen zu können. Wenn wir beispielsweise Dezimalzahlen speichern müssen, können wir den DECIMAL-Typ verwenden und die geeignete Genauigkeit entsprechend den Geschäftsanforderungen auswählen, sodass unsere Arbeit einfach auszuführen ist.

Oben finden Sie den detaillierten Inhalt der eingehenden Analyse des MySQL-Datentyps DECIMAL. Weitere Informationen zum MySQL-Datentyp DECIMAL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Dezimal-Padding-Problems des Dezimal-Datentyps in MySQL
  • MySQL Dezimalzahl unsigned Update negative Zahlen in 0 umgewandelt
  • Eine kurze Diskussion über die Unterschiede und eine Zusammenfassung der drei Gleitkommatypen Float, Double und Decimal in MySQL
  • Eine kurze Einführung in die Verwendung des Dezimaltyps in MySQL
  • Detaillierte Erklärung der Bedeutung von N und M im MySQL-Datentyp DECIMAL(N,M)
  • Detaillierte Erklärung der Verwendung von DECIMAL im MySQL-Datentyp
  • Der Unterschied zwischen dem Dezimaltyp und dem Float Double in MySQL (ausführliche Erklärung)
  • Detaillierte Erklärung zur Verwendung des MySQL-Datentyps DECIMAL

<<:  Detailliertes Tutorial zur Verwendung des Befehls xargs unter Linux

>>:  Mehrere Möglichkeiten zum Kapseln von Breadcrumb-Funktionskomponenten in Vue3

Artikel empfehlen

So generieren Sie eine eindeutige Server-ID in MySQL

Vorwort Wir alle wissen, dass MySQL die Server-ID...

So implementieren Sie abgerundete Ecken mit CSS3 unter Verwendung von JS

Ich bin auf ein Beispiel gestoßen, als ich nach e...

Beispiel für die Implementierung eines gestrichelten Rahmens mit html2canvas

html2canvas ist eine Bibliothek, die Canvas aus H...

Implementierungsbeispiel für ein JS-natives zweispaltiges Shuttle-Auswahlfeld

Inhaltsverzeichnis Verwendung Strukturzweige Code...

Gemeinsame Nutzung von zwei Plug-Ins zur Übersetzung von Webseiten

Übersetzen Sie diese URL: http://translateth.is G...

So installieren Sie das Programm setup.py unter Linux

Führen Sie zuerst den Befehl aus: [root@mini61 se...

Vue + ElementUI implementiert Paging-Funktion - MySQL-Daten

Inhaltsverzeichnis 1. Problem 2. Lösung 2.1 Pagin...

Nodejs konvertiert JSON-String in JSON-Objekt-Fehlerlösung

Wie konvertiere ich eine JSON-Zeichenfolge in ein...

Three.js realisiert den dynamischen 3D-Logoeffekt von Facebook Metaverse

Inhaltsverzeichnis Hintergrund Was ist das Metave...

Mobile Web-Bildschirmanpassung (rem)

Vorwort Ich habe vor Kurzem meine bisherigen Noti...