Es gibt viele Möglichkeiten, eine globale ID zu generieren. Hier ist eine einfache Lösung: Verwenden Sie die Auto-Increment-ID von MySQL, um eine global eindeutige ID zu generieren. 1. Erstellen Sie eine Tabelle, die nur zwei Felder benötigt: Tabelle „guid“ erstellen ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `stub` char(1) NOT NULL DEFAULT '' COMMENT 'Stub-Feld, das zum Besetzen der Grube verwendet wird', Primärschlüssel (`id`), UNIQUE KEY `uk_stub` (`stub`) – Stub als eindeutigen Index festlegen) ENGINE=MyISAM AUTO_INCREMENT=1000000000 DEFAULT CHARSET=utf8; Geben Sie den Startwert für die automatische Inkrementierung an: „alter table guid auto_increment=1000000000“, wodurch sichergestellt wird, dass die ID 10 Ziffern lang ist (es ist fast unmöglich, sie auf 11 Ziffern zu erhöhen). 2. Definieren Sie den Mybatis-Mapper: @Mapper öffentliche Schnittstelle GuidMapper { // Holen Sie sich eine global eindeutige ID * @zurückkehren */ // ersetzen durch afs_guid(stub) values('a'); // last_insert_id( auswählen); @Insert("ERSETZT IN guid (stub) VALUES('a')") @SelectKey(Anweisung = {"SELECT LAST_INSERT_ID()"}, Schlüsseleigenschaft = "guidHolder.id", vorher = falsch, Ergebnistyp = lang.Klasse) int getGuid( @Param("guidHolder") GuidHolder guidHolder); @Daten öffentliche statische Klasse GuidHolder{ private lange ID; privater String-Stub; } 3. Testen GuidMapper.GuidHolder guidHolder = neuer GuidMapper.GuidHolder(); guidMapper.getGuid(guidHolder); lange guid = guidHolder.getId(); // guid ist die zurückgegebene ID Schwanz Sicherheitsprobleme bei gleichzeitiger Nutzung REPLACE INTO ähnelt INSERT und ist sicher. Es wird zunächst geprüft, ob der Primärschlüssel oder der eindeutige Schlüssel wiederholt wird. Wenn dies der Fall ist, wird der ursprüngliche Schlüssel gelöscht und ein neuer hinzugefügt, um den ursprünglichen zu ersetzen. SELECT LAST_INSERT_ID() ist an die MySQL-Verbindung gebunden. Bei der aktuellen Verbindung löst der Vorgang die Änderung des auto_increment-Werts aus und der neue Wert wird abgerufen. Dieser Wert ist nur für die aktuelle Verbindung sichtbar. Andere Verbindungen erhalten den Wert erst, nachdem der auto_increment geändert wurde. Die beiden oben genannten Punkte gewährleisten die Parallelitätssicherheit. Selbst wenn Sie den Wert von id manuell reduzieren, wird er nach dem nächsten Ersetzen weiterhin basierend auf der letzten automatischen Inkrementierung erhöht. Dies liegt daran, dass durch manuelles Ändern des Werts von id der Wert von auto_increment nicht geändert wird. Ergänzendes Wissen: So stellen Sie die Generierung verteilter eindeutiger globaler IDs in Clustern mit hoher Parallelität sicher Vorwort Die eindeutige ID des Systems ist ein Problem, auf das wir beim Entwerfen eines Systems häufig stoßen und mit dem wir oft zu kämpfen haben. Dieser Artikel soll Ihnen eine Idee für die Generierung einer verteilten Lösung zur Generierung eindeutiger globaler IDs liefern und ich hoffe, er kann allen weiterhelfen. Bitte weisen Sie uns gerne auf etwaige Mängel hin! ! Frage Warum benötigen wir eine verteilte, global eindeutige ID und was sind die geschäftlichen Anforderungen für verteilte IDs? In komplexen verteilten Systemen ist es oft notwendig, eine große Menge an Daten und Nachrichten eindeutig zu identifizieren, wie beispielsweise in den Bereichen Finanzen, Zahlung, Gastronomie und Hotel von Meituan Dianping. Die Daten im System von Produkten wie Maoyan Movies nehmen allmählich zu. Nachdem die Datenbank in verschiedene Tabellen aufgeteilt wurde, ist eine eindeutige ID erforderlich, um ein Datenelement oder eine Information zu identifizieren. Insbesondere müssen Ians Bestellungen, Fahrer und Coupons alle durch eine eindeutige ID identifiziert werden. Zu diesem Zeitpunkt ist ein System, das eine global eindeutige ID generieren kann, sehr notwendig Einige strenge Anforderungen an die Regeln zur ID-Generierung Weltweit einzigartig Tendenz steigend Der Clustered-Index wird in der MySQL InnoDB-Engine verwendet. Da die meisten RDBMS die Btree-Datenstruktur zum Speichern von Indizes verwenden, sollten wir versuchen, geordnete Primärschlüssel zu verwenden, um bei der Auswahl von Primärschlüsseln die Schreibleistung sicherzustellen. Monoton zunehmend Stellen Sie sicher, dass die nächste ID größer als die vorherige ID ist, z. B. Transaktionsversionsnummer, inkrementelle IM-Nachricht, Sortierung und andere spezielle Anforderungen Informationssicherheit Wenn die ID fortlaufend ist, können böswillige Benutzer die URL problemlos der Reihe nach crawlen. Wenn es sich um eine Bestellnummer handelt, ist dies gefährlich, da Konkurrenten unser tägliches Bestellvolumen direkt erfahren können. Daher muss die ID in einigen Anwendungsszenarien unregelmäßig sein, damit Konkurrenten sie nur schwer erraten können. Mit Zeitstempel Sie können auch schnell erkennen, wann diese verteilte ID während der Entwicklung generiert wird Verfügbarkeitsanforderungen für Systeme zur Generierung von ID-Nummern Hohe Verfügbarkeit Wenn ich eine Anfrage zum Erhalt einer verteilten ID stelle, garantiert mir der Server in 99,999 % der Fälle, dass er eine eindeutige verteilte ID für mich erstellt. Geringe Latenz Senden Sie eine Anfrage, um eine verteilte ID zu erhalten. Der Server muss schnell sein, extrem schnell. Hohe QPS Wenn beispielsweise 100.000 Anfragen zur Erstellung verteilter IDs gleichzeitig eingehen, muss der Server in der Lage sein, diese zu verarbeiten und 100.000 verteilte IDs auf einmal erfolgreich zu erstellen. Allgemeine Universallösung UUID UUID.randomUUID(), die Standardform der UUID, enthält 32 hexadezimale Ziffern, die durch Bindestriche in fünf Segmente unterteilt sind, 36 Zeichen in der Form 8-4-4-4-12, mit sehr hoher Leistung, lokal generiert und ohne Netzwerkverbrauch. Probleme Schlechte Datenbankzugriffsleistung, da UUIDs ungeordnet sind Ungeordnet, die Generierungsreihenfolge kann nicht vorhergesagt werden und es können keine zunehmenden und geordneten Zahlen generiert werden Erstens werden verteilte IDs im Allgemeinen schrittweise verwendet, aber gemäß der offiziellen Empfehlung von MySQL sollte der Primärschlüssel so kurz wie möglich sein. Jede UUID ist sehr lang, daher wird dies nicht empfohlen. Primärschlüssel: Wenn die ID als Primärschlüssel verwendet wird, treten in bestimmten Umgebungen einige Probleme auf. Beispielsweise ist UUID nicht für die Verwendung als DB-Primärschlüssel geeignet. MySQL hat eine klare Erklärung. Index, B+-Baum-Indexaufteilung Da die verteilte ID der Primärschlüssel ist und der Primärschlüssel einen Index enthält und der MySQL-Index durch einen B+-Baum implementiert wird, wird jedes Mal, wenn neue UUID-Daten eingefügt werden, der zugrunde liegende B+-Baum des Index zur Abfrageoptimierung geändert. Da UUID-Daten ungeordnet sind, führt jedes Einfügen von UUID-Daten zu einer erheblichen Änderung des B+-Baums des Primärschlüssels, was sehr schlecht ist. Das Einfügen ist völlig ungeordnet, was nicht nur dazu führt, dass einige Zwischenknoten aufgeteilt werden, sondern auch viele ungesättigte Knoten vergeblich erstellt, was die Leistung des Datenbankeinfügens erheblich verringert. UUID kann nur globale Eindeutigkeit garantieren, erfüllt jedoch nicht den Trend einer zunehmenden oder monotonen Zunahme. Autoinkrementieren des Primärschlüssels der Datenbank Einzelne Maschine In einem verteilten System wird das Hauptprinzip des Autoinkrement-ID-Mechanismus der Datenbank durch die Autoinkrement-ID der Datenbank und das Ersetzen in der MySQL-Datenbank implementiert. Das Ersetzen in ähnelt hier der Einfügefunktion, mit dem Unterschied, dass das Ersetzen in zuerst versucht, in die Datenliste einzufügen. Wenn festgestellt wird, dass diese Datenzeile bereits in der Tabelle vorhanden ist (basierend auf dem Primärschlüssel oder dem eindeutigen Index), wird sie zuerst gelöscht und dann eingefügt. Andernfalls werden die neuen Daten direkt eingefügt. REPLACE INTO bedeutet das Einfügen eines Datensatzes. Wenn der Wert des eindeutigen Index in der Tabelle in Konflikt steht, werden die alten Daten ersetzt.
Bei jedem Einfügen stellen wir fest, dass die Originaldaten ersetzt werden und die ID zunimmt Das ist befriedigend Inkrementell Monotonie Einzigartigkeit In einer verteilten Situation mit geringer Parallelität kann diese Lösung verwendet werden, um eine global eindeutige ID zu erhalten. Cluster Verteilter Cluster Ist der ID-Selbstinkrementierungsmechanismus der Datenbank für verteilte IDs geeignet? Die Antwort ist nicht geeignet Es ist schwierig, das System horizontal zu erweitern. Was sollen wir beispielsweise tun, wenn wir nach der Definition der Schrittweite und der Anzahl der Maschinen eine Maschine hinzufügen müssen? Angenommen, es gibt eine Maschine mit den Nummern 1, 2, 3, 4, 5 (die Schrittweite ist 1) und wir müssen die Kapazität einer Maschine erweitern. Wir können Folgendes tun: Wir setzen den Anfangswert der zweiten Maschine viel höher als den der ersten. Das scheint in Ordnung zu sein, aber wenn 100 Maschinen online sind, ist es ein Albtraum, die Kapazität zu diesem Zeitpunkt zu erweitern. Daher ist der horizontale Erweiterungsplan des Systems komplex und schwer umzusetzen. Der Datenbankdruck ist immer noch sehr hoch. Jedes Mal, wenn eine ID abgerufen wird, muss die Datenbank gelesen und geschrieben werden, was die Leistung stark beeinträchtigt und die Regeln für geringe Latenz und hohe QPS bei verteilten IDs nicht erfüllt (bei hoher Parallelität beeinträchtigt dies die Leistung erheblich, wenn die ID aus der Datenbank abgerufen wird). Generieren Sie eine globale ID-Strategie basierend auf Redis Standalone-Version Da Redis ein Single-Threaded-System ist, ist die Atomizität von Natur aus gewährleistet und kann mit den atomaren Operationen INCR und INCRBY erreicht werden. INCRBY: Legen Sie die Wachstumsschrittgröße fest Cluster-Verteilung Hinweis: Im Fall eines Redis-Clusters müssen wie bei MySQL unterschiedliche Wachstumsschritte festgelegt werden und der Schlüssel muss mit einer Gültigkeitsdauer versehen sein. Sie können einen Redis-Cluster verwenden, um einen höheren Durchsatz zu erzielen. Angenommen, es gibt 5 Redis-Server in einem Cluster. Sie können den Wert jedes Redis-Servers jeweils auf 1, 2, 3, 4 und 5 initialisieren und dann die Schrittweite auf 5 festlegen. Die von jedem Redis generierten IDs sind:
Das Problem besteht jedoch darin, dass die Wartung und Konfiguration des Redis-Clusters ziemlich mühsam sind. Da ein einzelner Ausfallpunkt erforderlich ist, muss der Sentinel Das Hauptproblem besteht jedoch darin, dass Sie für eine ID den gesamten Redis-Cluster einführen müssen, was übertrieben erscheint. Snowflake-Algorithmus Was ist Twitters verteilter, automatisch inkrementierender ID-Algorithmus, Snowflake Zunächst migrierte Twitter sein Speichersystem von MySQL zu Cassandra (einem von Facebook entwickelten Open-Source-verteilten NoSQL-Datenbanksystem). Da Cassandra keinen sequentiellen ID-Generierungsmechanismus hatte, entwickelte es einen solchen global eindeutigen ID-Generierungsdienst. Der verteilte Snowflake-Algorithmus SnowFlake von Twitter kann 260.000 automatisch inkrementierte sortierbare IDs pro Sekunde generieren. Twitters SnowFlake generiert IDs in zeitlich geordneter Weise Das Ergebnis der vom SnowFlake-Algorithmus generierten ID ist eine 64-Bit-Ganzzahl vom Typ „Long“ (die maximale Länge nach der Konvertierung in eine Zeichenfolge beträgt 19). Im verteilten System kommt es zu keinen ID-Kollisionen (differenziert nach Rechenzentrums- und Worker-ID) und die Effizienz ist hoch. In einem verteilten System gibt es einige Szenarien, die eine global eindeutige ID erfordern. Die grundlegenden Anforderungen zum Generieren einer ID sind: In einer verteilten Umgebung ist globale Eindeutigkeit erforderlich Im Allgemeinen muss es monoton ansteigend sein, da in der Datenbank im Allgemeinen eindeutige IDs vorhanden sind und die Eigenschaft von InnoDB darin besteht, den Inhalt in den Blattknoten auf dem Primärschlüsselindex zu speichern und von links nach rechts anzusteigen. Aus Gründen der Datenbankleistung ist es daher im Allgemeinen am besten, monoton ansteigende IDs zu generieren. Um ID-Konflikte zu vermeiden, können 36-Bit-UUIDs verwendet werden, doch UUIDs haben einige Nachteile. Erstens sind sie relativ lang und zweitens sind UUIDs im Allgemeinen ungeordnet. Möglicherweise benötigen Sie auch keine Regeln, denn wenn Sie eine eindeutige ID als Bestellnummer verwenden, brauchen Sie diese Regel, um zu verhindern, dass andere die Anzahl der Bestellungen pro Tag erfahren. Struktur Mehrere Kernkomponenten des Snowflake-Algorithmus In Java sind 64-Bit-Zertifikate vom Typ „Long“, daher wird die vom SnowFlake-Algorithmus generierte ID in der „Long“-Klasse gespeichert. Teil I Das höchste Bit im Binärsystem ist das Vorzeichenbit; 1 steht für eine negative Zahl und 0 für eine positive Zahl. Die generierte ID ist normalerweise eine Ganzzahl, daher ist das höchste Bit auf 0 festgelegt. Teil 2 Der zweite Teil ist das 41-Bit-Zeitstempelbit, mit dem der Zeitstempel in Millisekunden aufgezeichnet wird. 41 Bits können 2^41 -1 Zahlen darstellen Wenn es nur zur Darstellung positiver Ganzzahlen verwendet wird, beträgt der darstellbare Bereich: 0 - 2 ^ 41 -1. Der Grund für minus 1 besteht darin, dass der darstellbare Wertebereich bei 0 und nicht bei 1 beginnt. Das bedeutet, dass 41 Bits den Wert von 2^41 - 1 Millisekunde darstellen können, was in Jahreseinheiten umgerechnet 69,73 Jahren entspricht. Teil 3 Der dritte Teil ist die Arbeitsmaschinen-ID. 10 Bits werden zum Aufzeichnen der Arbeitsmaschinen-ID verwendet Einsetzbar auf 2^10 = 1024 Knoten, inklusive 5-stelliger datacenterId (Rechenzentrum, Computerraum) und 5-stelliger workerID (Maschinencode) Die maximale positive Ganzzahl, die durch 5 Bits dargestellt werden kann, ist 2^5 = 31 Zahlen, die verschiedene Rechenzentren und Maschinencodes darstellen können. Teil 4 Die positive Ganzzahl, die mit 12 Bits dargestellt werden kann, ist 2^12 = 4095, das heißt, 0 1 2 … 4094 kann verwendet werden, um 4095 ID-Nummern darzustellen, die von derselben Maschine und mit demselben Zeitstempel generiert wurden. SnowFlake kann garantieren Alle generierten IDs nehmen im Zeitverlauf zu Im gesamten verteilten System gibt es keine doppelten IDs, da sie anhand von datacenterId und workerId unterschieden werden. erreichen Der Snowflake-Algorithmus ist in Scala geschrieben, und manche Leute verwenden Java, um ihn zu implementieren. Die GitHub-Adresse lautet /** * Twitters Snowflake-Algorithmus – Java-Implementierung * * @author darüber hinaus * @Datum 26.11.2016 */ öffentliche Klasse SnowFlake { /** * Startzeitstempel */ privates endgültiges statisches langes START_STMP = 1480166465631L; /** * Die Anzahl der Bits, die jeder Teil einnimmt*/ private final static long SEQUENCE_BIT = 12; //Anzahl der Ziffern, die die Seriennummer belegt private final static long MACHINE_BIT = 5; //Anzahl der Ziffern, die die Maschinenkennung belegt private final static long DATACENTER_BIT = 5;//Anzahl der Ziffern, die das Rechenzentrum belegt/** * Maximalwert jedes Teils */ private endgültige statische lange MAX_DATACENTER_NUM = -1L ^ (-1L << DATACENTER_BIT); private endgültige statische lange MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT); private endgültige statische lange MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT); /** * Die Verschiebung jedes Teils nach links*/ private endgültige statische lange MACHINE_LEFT = SEQENCE_BIT; privates, endgültiges, statisches, langes DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT; privates, endgültiges, statisches, langes TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT; private long datacenterId; //Rechenzentrumprivate long machineId; //Maschinen-IDprivate long sequence = 0L; //Seriennummerprivate long lastStmp = -1L; //Letzter Zeitstempelpublic SnowFlake(long datacenterId, long machineId) { wenn (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) { throw new IllegalArgumentException("datacenterId darf nicht größer als MAX_DATACENTER_NUM oder kleiner als 0 sein"); } wenn (Maschinen-ID > MAX_MASCHINENANZAHL || Maschinen-ID < 0) { throw new IllegalArgumentException("machineId darf nicht größer als MAX_MACHINE_NUM oder kleiner als 0 sein"); } this.datacenterId = Datencenter-ID; this.machineId = Maschinen-Id; } /** * Generieren Sie die nächste ID * * @zurückkehren */ öffentlich synchronisiert lange nextId() { lange currStmp = getNewstmp(); wenn (aktuellerStmp < letzterStmp) { throw new RuntimeException("Uhr wurde zurückgestellt. ID-Generierung wird abgelehnt"); } wenn (aktuellerStmp == letzterStmp) { //In der gleichen Millisekunde erhöht sich die Sequenznummer automatisch sequence = (sequence + 1) & MAX_SEQUENCE; //Die Anzahl der Sequenzen in derselben Millisekunde hat das Maximum erreicht if (sequence == 0L) { currStmp = getNextMill(); } } anders { //In verschiedenen Millisekunden wird die Sequenznummer auf 0 gesetzt Sequenz = 0L; } letzterStmp = aktuellerStmp; return (currStmp - START_STMP) << TIMESTMP_LEFT //Zeitstempelteil | datacenterId << DATACENTER_LEFT //Rechenzentrumteil | machineId << MACHINE_LEFT //Maschinen-ID-Teil | sequence; //Seriennummernteil} private long getNextMill() { lange Mühle = getNewstmp(); während (Mühle <= letzterStmp) { Mühle = getNewstmp(); } Rücklaufmühle; } private long getNewstmp() { return System.currentTimeMillis(); } öffentliche statische void main(String[] args) { Schneeflocke Schneeflocke = neue Schneeflocke (2, 3); für (int i = 0; i < (1 << 12); i++) { System.out.println(snowFlake.nextId()); } } } Erfahrung in der Projektumsetzung Hutools-Werkzeugsatz Adresse: https://github.com/looly/hutool SpringBoot integriert den Snowflake-Algorithmus Einführung der Hutool-Tool-Klasse <Abhängigkeit> <groupId>cn.hutool</groupId> <artifactId>hutool-alles</artifactId> <version>5.3.1</version> </Abhängigkeit> Integration /** * Snowflake-Algorithmus* * @Autor: Moxi* @Erstellen: 2020-04-18-11:08 */ öffentliche Klasse SnowFlakeDemo { private lange Arbeiter-ID = 0; private lange datacenterId = 1; private Snowflake snowFlake = IdUtil.createSnowflake(workerId, datacenterId); @PostKonstrukt öffentliche void init() { versuchen { //Konvertiere die Netzwerk-IP in eine lange workerId = NetUtil.ipv4ToLong(NetUtil.getLocalhostStr()); } Fang (Ausnahme e) { e.printStackTrace(); } } /** * Holen Sie sich die Schneeflocken-ID * @zurückkehren */ öffentliche synchronisierte lange SnowflakeId() { gibt this.snowFlake.nextId() zurück; } öffentliche synchronisierte lange SnowflakeId (lange WorkerId, lange DatacenterId) { Snowflake Schneeflocke = IdUtil.createSnowflake(workerId, datacenterId); gibt snowflake.nextId() zurück; } öffentliche statische void main(String[] args) { SnowFlakeDemo snowFlakeDemo = neue SnowFlakeDemo(); für (int i = 0; i < 20; i++) { neuer Thread(() -> { System.out.println(snowFlakeDemo.snowflakeId()); }, String.valueOf(i)).start(); } } } Holen Sie sich das Ergebnis 1251350711346790400 1251350711346790402 1251350711346790401 1251350711346790403 1251350711346790405 1251350711346790404 1251350711346790406 1251350711346790407 1251350711350984704 1251350711350984706 1251350711350984705 1251350711350984707 1251350711350984708 1251350711350984709 1251350711350984710 1251350711350984711 1251350711350984712 1251350711355179008 1251350711355179009 1251350711355179010 Für und Wider Vorteil Die Millisekunden liegen in der hohen Dimension, die Auto-Inkrement-Sequenz in der niedrigen Dimension und die gesamte ID weist eine steigende Tendenz auf. Es ist nicht auf Systeme von Drittanbietern wie Datenbanken angewiesen und wird als Dienst bereitgestellt, der eine höhere Stabilität und eine sehr hohe Leistung bei der Generierung von IDs bietet. Bits können entsprechend ihren eigenen Geschäftsmerkmalen zugewiesen werden, was sehr flexibel ist Mangel Hängt von der Maschinenuhr ab. Wenn die Maschinenuhr zurückgedreht wird, werden doppelte IDs generiert. Auf einer einzelnen Maschine ist die Zunahme vorhanden, aber da es sich um eine verteilte Umgebung handelt, können die Uhren auf jeder Maschine nicht vollständig synchronisiert werden, und manchmal gibt es Situationen, in denen die globale Zunahme nicht vorhanden ist. Dieser Mangel kann als unwichtig angesehen werden. Im Allgemeinen erfordern verteilte IDs nur eine Zunahmetendenz und nicht unbedingt eine Zunahmetendenz. 90 % der Anforderungen erfordern nur eine Zunahmetendenz. Andere Ergänzungen Um das Problem des Zurückstellens der Uhr zu lösen, das zu doppelten IDs führt, hat später jemand eine Lösung vorgeschlagen. Baidus Open-Source-Generator für verteilte eindeutige IDs, UidGenerator Leaf - Meituan Dianping Verteiltes ID-Generierungssystem Der obige Artikel, eine einfache ID-Generierungsstrategie: Implementierung der Generierung einer global eindeutigen ID aus einer Mysql-Tabelle, ist alles, was ich mit Ihnen teilen kann. Ich hoffe, er kann Ihnen als Referenz dienen und ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Das könnte Sie auch interessieren:
|
<<: Detailliertes Tutorial zur Konfiguration von Nginx für https-verschlüsselten Zugriff
>>: JavaScript, um den Effekt des Tab-Leistenwechsels zu erzielen
1. Installieren und starten Sie nginx # Installie...
Vorwort: Kürzlich stieß ich in meinem Projekt auf...
Ich verwende die Funktion zur Spracherkennung mit...
Vorwort Dieser Artikel stellt die fünfte Frage vo...
Die in MySQL integrierte Datumsfunktion TIMESTAMP...
Starten Sie alle gestoppten Docker-Container mit ...
1. MySql-Architektur Bevor wir die Speicher-Engin...
Inhaltsverzeichnis 1. CentOS7+MySQL8.0, Yum-Quell...
Dokumentumfang Dieser Artikel behandelt den Modus...
1. Geben Sie den Befehl mysqld --skip-grant-table...
Überwachungshost hinzufügen Host 192.168.179.104 ...
Fehlerszenario Beim Aufrufen von JDBC zum Einfüge...
Vorwort Verwenden Sie js, um einen Jahresrotation...
In diesem Artikel wird der spezifische Code des J...
In vertikaler Richtung können Sie die Zeilenausri...