MySQL-Methode zum Generieren von Zufallszahlen, Zeichenfolgen, Daten, Bestätigungscodes und UUIDs

MySQL-Methode zum Generieren von Zufallszahlen, Zeichenfolgen, Daten, Bestätigungscodes und UUIDs

Im vorherigen Artikel wurde erläutert, wie man in Oracle Zufallszahlen, Zeichenfolgen, Daten, Bestätigungscodes und UUIDs generiert. Heute werden wir weiter darüber sprechen, wie man in MySQL verschiedene Zufallsdaten generiert.

📝Alle von Computern generierten Zahlen sind Pseudozufallszahlen und keine echten physikalischen Zufallszahlen.

Zufallszahlen generieren

Generieren Sie eine Zufallszahl zwischen 0 und 1

Mit der RAND-Funktion in MySQL kann eine Zufallszahl größer oder gleich 0 und kleiner als 1 generiert werden. Zum Beispiel:

SELECT rand();
rand() |
------------------|
0,7245639057127423|

SELECT rand();
rand() |
----------------------------------|
0,01697599982561171|

Die Funktion gibt einen Double-Wert mit 16 Dezimalstellen zurück; jeder Aufruf gibt andere Daten zurück.

Wenn Sie bestimmte Szenarien reproduzieren möchten, müssen Sie sicherstellen, dass Sie bei jedem Ausführen dieselben Zufallszahlen generieren. In diesem Fall können Sie der RAND-Funktion einen Eingabeparameter übergeben, um einen Zufallszahlen-Startwert festzulegen. Zum Beispiel:

SELECT rand(1);
rand(1) |
----------------------------------|
0,40540353712197724|

SELECT rand(1);
rand(1) |
----------------------------------|
0,40540353712197724|

Aus den Ergebnissen können wir ersehen, dass derselbe Seed dieselbe Zufallszahl zurückgibt.

Erzeugt eine Zufallszahl im angegebenen Bereich

Basierend auf der RAND-Funktion und mathematischen Operationen können Sie eine Zufallszahl zwischen zwei beliebigen Zahlen zurückgeben:

niedrig + RAND() * (hoch − niedrig)

Der obige Ausdruck gibt eine Zufallszahl zurück, die größer oder gleich „low“ und kleiner als „high“ ist. Zum Beispiel:

SELECT 10 + rand(1) * 10;
10 + rand(1) * 10 |
------------------|
14.054035371219772|

Das obige Beispiel gibt eine Zufallszahl zurück, die größer oder gleich 10 und kleiner als 20 ist.

Wenn Sie zufällige Ganzzahlen innerhalb eines bestimmten Bereichs generieren möchten, können Sie die Funktion FLOOR hinzufügen. Zum Beispiel:

Wählen Sie floor(10 + rand(1) * (10)) AS rd;
rd |
----|
14,0|

Diese Anweisung gibt eine zufällige Ganzzahl größer oder gleich 10 und kleiner oder gleich 19 (nicht 20) zurück.

Generieren Sie einen 6-stelligen mobilen Bestätigungscode

Wir haben eine zufällige Ganzzahl innerhalb des angegebenen Bereichs erhalten und können zusammen mit der LPAD-Funktion einen 6-stelligen Mobiltelefon-Verifizierungscode generieren. Zum Beispiel:

Wählen Sie lpad (Floor (Rand (999) * 1000000), 6, '0') als Captcha;
Captcha|
-------|
088146 |

Die Funktion lpad kann sicherstellen, dass 0 vorne hinzugefügt wird, wenn die Daten weniger als 6 Bit umfassen.

Generiert Zufallszahlen, die einer Normalverteilung folgen

Die Funktion RAND generiert eine Zufallszahl, die einer gleichmäßigen Verteilung folgt. MySQL bietet keine Funktion zum Generieren von Zufallszahlen, die einer Normalverteilung folgen. Wir können eine gespeicherte Funktion erstellen, um normalverteilte Zufallszahlen zu simulieren:

Trennzeichen //
Funktion „normal_distrib“ erstellen (Mittelwert „double“, Standardabweichung „double“) 
gibt doppeltes kein SQL zurück
beginnen
setze @x = rand(), @y = rand();
setze @nd = (sqrt(-2 * log(@x)) * cos(2 * pi() * @y)) * stdev + Mittelwert;
Rückgabe @nd;
Ende
//
Trennzeichen ;

Die obige Funktion generiert normalverteilte Zufallszahlen aus zwei gleichmäßig verteilten Zufallszahlen unter Verwendung des Box-Muller-Transformationsalgorithmus.

Die folgende Anweisung generiert mithilfe der Funktion normal_distrib eine normalverteilte Zufallszahl mit einem Erwartungswert von 0 und einer Standardabweichung von 1:

SELECT normal_distrib(0,1);
Normalverteilung(0,1)|
----------------------------------|
 1.4930564399841173|

Mit der folgenden Anweisung kann überprüft werden, ob die Funktion normal_distrib einer Normalverteilung folgt:

mit rekursivem temp(val) als (
 wähle normal_distrib(0,1)
 Vereinigung alle
 wähle normal_distrib(0,1)
 von temp
 Grenze 1000000
)
wähle /*+ set_var(cte_max_recursion_depth = 1m) */avg(val),std(val)
von Temperatur;
Durchschnitt(Wert) |Standard(Wert) |
---------------------|------------------|
-0,002340136192616743|0,9994844557755181|

Wenn man diese Daten 1.000.000 Mal ausführt und den Mittelwert und die Standardabweichung berechnet, liegen die zurückgegebenen Ergebnisse sehr nahe bei 0 und 1.

Generieren Sie eine zufällige Zeichenfolge

Generieren Sie eine zufällige Zeichenfolge mit fester Länge

Zusätzlich zu Zufallszahlen müssen wir manchmal auch zufällige Zeichenfolgen generieren. MySQL bietet keine spezielle Funktion zum Generieren von Zufallszeichenfolgen, diese kann jedoch durch andere Funktionen simuliert werden. Zum Beispiel:

Wählen Sie char(floor(rand() * 26)+65) als rand_char;
rand_char|
---------|
T |

Die obige Abfrage gibt einen zufälligen Großbuchstaben zurück. Die Funktion char wird verwendet, um den ASCII-Code in das entsprechende Zeichen umzuwandeln. Basierend auf dieser Abfrage können wir außerdem eine gespeicherte Funktion erstellen:

Trennzeichen //
Funktion „rand_string (Länge Ganzzahl)“ erstellen 
gibt Text zurück, kein SQL
beginnen
 Deklarieren Sie den Zähler int als Standardwert 1.
 deklariere str-Text als Standard '';
 
 wenn len < 1 dann
 gibt null zurück;
 Ende wenn;
 
 while Zähler <= Länge do
 setze str = concat(str, char(floor(rand() * 94) + 33));
 setze Zähler = Zähler + 1;
 Ende während;
 
 gibt str zurück;
Ende
//
Trennzeichen ;

Die Funktion rand_string gibt eine zufällige Zeichenfolge zurück, die aus beliebigen druckbaren Zeichen besteht (ASCII-Codes von 33 bis 126). Zum Beispiel:

rand_string(8)|
--------------|
7j5dz[58 |

Das obige Beispiel gibt eine zufällige Zeichenfolge der Länge 8 zurück, die aus druckbaren Zeichen besteht.

Darüber hinaus kann die elt-Funktion in MySQL auch verwendet werden, um das Element an der angegebenen Position zurückzugeben. Zum Beispiel:

Wählen Sie elt(1 + floor(rand() * 36),
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
   'A','B','C','D','E','F','G',
   'H','I','J','K','L','M','N',
   'O','P','Q','R','S','T',
   'U', 'V', 'W', 'X', 'Y', 'Z') als Wert;
Wert|
---|
B |

Die obige Anweisung gibt eine Zufallszahl oder einen Großbuchstaben zurück. Wenn Sie diese Anweisung in die Funktion rand_string einsetzen, können Sie eine zufällige Zeichenfolge aus Zahlen und Großbuchstaben zurückgeben.

Erzeugt eine zufällige Zeichenfolge variabler Länge

Wie geben Sie also eine zufällige Zeichenfolge mit variabler Länge zurück? Es ist ganz einfach: Geben Sie einfach einen Parameter mit zufälliger Länge für die Funktion rand_string an. Zum Beispiel:

Wählen Sie Rand_Zeichenfolge (Boden (10 + Rand () * 11));
Rand_Zeichenfolge(Boden(10 + Rand() * 11))|
------------------------------------|
4U13MjO+($}k"cO@5%[ |

Das obige Beispiel gibt eine zufällige Zeichenfolge druckbarer Zeichen mit einer Länge größer oder gleich 10 und kleiner oder gleich 20 zurück.

Generieren Sie ein zufälliges Datum und eine zufällige Uhrzeit

Durch das Hinzufügen einer Zufallszahl zum angegebenen Datum können Sie ein zufälliges Datum erhalten. Zum Beispiel:

SELECT date_add('2020-01-01', Intervall rand() * 31 Tage) rand_date;
Randdatum |
----------|
19.01.2020|

Das obige Beispiel gibt ein zufälliges Datum im Januar 2020 zurück. Die folgende Anweisung gibt eine zufällige Tageszeit zurück:

SELECT Sek. bis Zeit(rand() * 3600) Randzeit;
Randzeit |
------------------|
00:05:29.546878000|

Unter ihnen wird die Funktion sec_to_time verwendet, um Sekunden in Zeitdaten umzuwandeln.

Einen zufälligen Datensatz aus einer Tabelle abrufen

Bei einer Abfrageanweisung, die mehrere Datenzeilen zurückgibt, gibt die RAND-Funktion jedes Mal andere Zufallsdaten zurück. Zum Beispiel:

Wählen Sie Rand (1) aus Mitarbeiter;
rand(1) |
--------------------|
 0,40540353712197724|
 0,8716141803857071|
 0,1418603212962489|
...

Mit dieser Funktion können wir zufällige Datenzeilen aus einer Tabelle zurückgeben. Zum Beispiel:

Wählen Sie Mitarbeiter-ID, Mitarbeitername aus.
VON Mitarbeiter
ORDER BY rand(1)
GRENZE 5;
Mitarbeiter-ID|Mitarbeitername |
------|----------|
  6|Wei Yan|
 14|Zhang Bao|
 16|Zhou Cang|
 15|Zhao Tong|
  1|Liu Bei|

Das obige Beispiel gibt 5 zufällige Zeilen aus der Mitarbeitertabelle zurück. Diese Methode muss für jede Datenzeile in der Tabelle eine Zufallszahl generieren und diese dann sortieren. Daher wird sie mit zunehmender Datenmenge in der Tabelle allmählich langsamer.

Wenn in der Tabelle ein automatisch inkrementierter Primärschlüssel vorhanden ist, können Sie auch zufällige Daten basierend auf dem Primärschlüssel generieren. Zum Beispiel:

Wählen Sie Runde (rand() * (wählen Sie max (emp_id) aus Mitarbeiter)) als ID;
Ich würde |
----|
10,0|

Geben Sie dann einen zufälligen Datensatz basierend auf dieser Zufallszahl zurück:

Wählen Sie e.emp_id, e.emp_name
VON Mitarbeiter
INNER JOIN (SELECT Runde (rand() * (SELECT max (emp_id) FROM Mitarbeiter)) AS ID
  ) AS t
WO e.emp_id >= t.id
GRENZE 1;
Mitarbeiter-ID|Mitarbeitername|
------|--------|
  9|Zhao Yun|

Diese Methode kann jeweils nur einen zufälligen Datensatz zurückgeben und gibt nur dann gleichmäßig verteilte zufällige Datensätze zurück, wenn in den Werten des Auto-Increment-Felds keine Lücken vorhanden sind.

UUID generieren

UUID (Universal Unique Identifier) ​​bzw. GUID (Globally Unique Identifier) ​​ist eine 128-Bit-Nummer, mit der jedes Netzwerkobjekt oder jede Netzwerkressource eindeutig identifiziert werden kann. Aufgrund ihres Generierungsmechanismus ist garantiert, dass eine UUID fast nie mit anderen UUIDs wiederholt wird, weshalb sie häufig zum Generieren von Primärschlüsselwerten in Datenbanken verwendet wird.

MySQL bietet eine Systemfunktion UUID, die zum Generieren von UUIDs verwendet werden kann. Zum Beispiel:

Wählen Sie uuid();
uuid() |
------------------------------------|
35f67fde-e0e9-11ea-9d25-0800272142b1|

Wenn Sie eine UUID ohne Bindestriche (-) generieren möchten, können Sie die Funktion REPLACE verwenden:

Wählen Sie Ersetzen(uuid(),'-','');
ersetzen(uuid(),'-','') |
--------------------------------|
8505290be0ea11ea9d250800272142b1|

Darüber hinaus bietet MySQL auch eine UUID_SHORT-Funktion, die eine vorzeichenlose 64-Bit-Ganzzahl zurückgeben kann. Zum Beispiel:

Wählen Sie uuid_short();
uuid_short() |
-----------------|
98862025337208832|

Diese Funktion gibt eine „kurze“ eindeutige Kennung zurück, die nur dann eindeutig ist, wenn die folgenden Bedingungen erfüllt sind:

  • Die Server-ID des aktuellen Servers liegt zwischen 0 und 255 und ist in der Replikationsstruktur eindeutig.
  • Die Systemzeit des Server-Hosts wurde vor und nach dem Neustart von mysqld nicht zurückgesetzt;
  • Die durchschnittliche Anzahl der Anrufe pro Sekunde beträgt weniger als 16 Millionen.

Zusammenfassen

In diesem Artikel wird erläutert, wie Sie in einer MySQL-Datenbank zufällige Daten generieren, darunter Zufallszahlen, Prüfcodes, Zufallszeichenfolgen sowie zufällige Daten und Uhrzeiten. Außerdem wird erläutert, wie Sie zufällige Datensätze aus einer Tabelle zurückgeben und UUIDs generieren.

Dies ist das Ende dieses Artikels zum Generieren von Zufallszahlen, Zeichenfolgen, Daten, Bestätigungscodes und UUIDs in MySQL. Weitere Informationen zum Generieren von Zufallszahlen und UUIDs in MySQL 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:
  • Eine kurze Analyse, ob der MySQL-Primärschlüssel Zahlen oder UUIDs für schnellere Abfragen verwendet
  • Der Unterschied sowie die Vor- und Nachteile des MySQL-Primärschlüssels UUID und des automatisch inkrementierten Primärschlüssels
  • Detaillierte Analyse, warum MySQL die Verwendung von UUID oder Snowflake-ID als Primärschlüssel nicht empfiehlt
  • So ändern Sie die Server-UUID in MySQL
  • So entfernen Sie horizontale Linien beim Speichern von UUID in MySQL
  • Warum verwendet MySQL für die Analyse und den Entwurf des Tabellenprimärschlüssels nicht die UUID?

<<:  CSS zum Erzielen eines Beispielcodes für eine Bildlaufleiste

>>:  Docker erstellt Schritte zur Implementierung von Kubectl-Images

Artikel empfehlen

jQuery implementiert den Tabellen-Paging-Effekt

In diesem Artikel wird der spezifische Code von j...

Wie wird die Transaktionsisolation von MySQL erreicht?

Inhaltsverzeichnis Gleichzeitige Szenarien Schrei...

So konfigurieren Sie SSL für den Koa2-Dienst

I. Einleitung 1: SSL-Zertifikat Mein Domänenname ...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.27 winx64

In diesem Artikel wird die Installations- und Kon...

Heute bin ich auf ein sehr seltsames Problem gestoßen und habe es selbst gelöst

...Es ist so, heute wollte ich ein Popup-Fenster m...

Vue.js verarbeitet Icon-Symbole über Komponenten

Icon-Icon-Verarbeitungslösung Das Ziel dieses Dat...

Über 40 schöne Beispiele für Webformular-Designs

Webformulare sind der primäre Kommunikationskanal...