Lernen Sie schnell die MySQL-Grundlagen

Lernen Sie schnell die MySQL-Grundlagen

In diesem Artikel wird hauptsächlich die grundlegende Verwendung von SQL behandelt. Dabei werden die folgenden Aspekte abgedeckt:

  • SQL-Fallspezifikation
  • Datenbanktypen und anwendbare Szenarien
  • SELECT-Ausführungsprozess
  • WHERE-Nutzungsrichtlinien
  • Allgemeine Funktionen in MySQL
  • Unterabfrageklassifizierung
  • So wählen Sie geeignete EXISTS- und IN-Unterabfragen aus

SQL verstehen

SQL ist eine der zeitaufwändigsten Methoden zur Interaktion mit Daten. Wenn man es nach Funktionen unterteilt, kann es in die folgenden vier Teile unterteilt werden:

  • DDL, Datendefinitionssprache. Definieren Sie Datenbankobjekte, Datentabellen und Datenspalten. Das heißt, Sie können die Datenbank- und Tabellenstruktur hinzufügen, löschen und ändern.
  • DML, Datenmanipulationssprache. Datentabellen hinzufügen, löschen und ändern.
  • DCL, Datenkontrollsprache. Definieren Sie Zugriffsrechte und Sicherheitsstufen.
  • DQL, Datenabfragesprache. Wird zum Abfragen von Daten verwendet.

Beim Schreiben von SQL stellen Sie möglicherweise fest, dass viele SQLs nicht mit denselben Groß- oder Kleinbuchstaben geschrieben sind. Obwohl dies die Ausführungsergebnisse von SQL nicht beeinflusst, ist die Einhaltung eines einheitlichen Schreibstandards der Schlüssel zur Verbesserung der Effizienz. Normalerweise werden die folgenden Grundsätze befolgt:

  • Tabellennamen, Tabellenaliase, Feldnamen, Feldaliase usw. sollten klein geschrieben werden.
  • SQL-reservierte Wörter, Funktionsnamen, Bindungsvariablen usw. werden in Großbuchstaben geschrieben.
  • In Datentabellen werden Feldnamen mit Unterstrichen benannt.

Die derzeit wichtigsten DBMS sind:

  • Relationale Datenbank: Eine Datenbank, die auf einem relationalen Modell basiert. Beim Erstellen einer Tabelle wird die Beziehung zwischen den Tabellen normalerweise durch ein ER-Diagramm dargestellt.
  • Schlüsselwertdatenbank: speichert Daten in Form von Schlüsselwerten. Der Vorteil liegt in der schnellen Suchgeschwindigkeit, der Nachteil jedoch darin, dass keine Filterbedingungen wie WHERE wie bei relationalen Datenbanken verwendet werden können. Ein gängiges Szenario ist die Verwendung als Inhaltscache.
  • Dokumentbasierte Datenbanken verwenden Dokumente als Grundeinheit für die Verarbeitung von Informationen bei der Speicherung.
  • Suchmaschine: konzipiert für die Volltextsuche. Das Kernprinzip ist der „invertierte Index“.
  • Spaltenbasierte Datenbank: Im Vergleich zu zeilenbasierten Datenbanken wie MySQL speichern spaltenbasierte Datenbanken Daten in Spalten. Da Spalten denselben Datentyp haben, können sie besser komprimiert werden, wodurch die E/A des Systems reduziert wird. Sie eignen sich für verteilte Dateisysteme, ihre Funktionen sind jedoch relativ eingeschränkt.
  • Graphdatenbanken verwenden Graphdatenstrukturen, um Beziehungen zwischen Entitäten zu speichern. Beispielsweise werden die Beziehungen zwischen Personen in einem sozialen Netzwerk mithilfe eines Datenmodells implementiert, das aus Knoten und Kanten besteht.

SELECT verstehen

SELECT ist normalerweise das erste Schlüsselwort, mit dem Sie beim Erlernen von SQL in Berührung kommen. Ich werde hier nicht auf die Grundlagen eingehen, aber hier sind einige gängige Spezifikationen:

Alias

Wählen Sie Name AS n FROM Student

Konstanten abfragen und eine Spalte mit festen Konstanten hinzufügen:

Wählen Sie „Studenteninformationen“ als student_info, Name FROM Student

Entfernen doppelter Zeilen

WÄHLEN SIE EIN UNTERSCHIEDLICHES Alter vom Schüler

Zu beachten ist, dass DISTINCT Duplikate aus allen nachfolgenden Spalten entfernt. Im folgenden Fall wird die Kombination aus Alter und Name entfernt.

Wählen Sie unterschiedliches Alter, Name aus dem Schüler aus.

Daten sortieren, ASC steht für aufsteigende Reihenfolge, DESC steht für absteigende Reihenfolge

Sortieren Sie beispielsweise zuerst nach Namen und dann nach Alter, wenn die Namen gleich sind.

SELECT DISTINCT age FROM student ORDERY BY name,age DESC

Begrenzen Sie die Anzahl der Rücksendungen

SELECT DISTINCT Alter FROM Student ORDERY BY Name DESC LIMIT 5

SELECT-Ausführungsreihenfolge

Nur wenn wir die Ausführungsreihenfolge von SELECT verstehen, können wir effizienteres SQL schreiben.

Es gibt zwei Prinzipien für die SELECT-Reihenfolge:

  • Die Reihenfolge der Schlüsselwörter kann nicht umgekehrt werden:
    AUSWÄHLEN ... VON ... WO ... GRUPPIEREN NACH ... HABEN … BESTELLEN NACH ...
  • SELECT wird in der folgenden Reihenfolge ausgeführt:
    VON > WO > GRUPPE NACH > HABEN > AUSGEWÄHLTE Felder > UNTERSCHIEDLICH > BESTELLEN NACH > LIMIT
SELECT DISTINCT student_id, name, count(*) as num #Sequenz 5
VON Student JOIN Klasse ON Student.Class_ID = Class.Class_ID #Sequenz 1
WO Alter > 18 #Sequenz 2
GROUP BY student.class_id #Sequenz 3
HAVING num > 2 #Sequenz 4
ORDER BY num DESC #Sequenz 6
LIMIT 2 #Sequenz 7

Bevor wir diesen Prozess einzeln analysieren, müssen wir wissen, dass in jedem der oben genannten Schritte eine virtuelle Tabelle generiert wird und diese virtuelle Tabelle dann im nächsten Schritt als Eingabe verwendet wird. Dieser Prozess ist für uns jedoch unsichtbar:

  1. Führen Sie ausgehend von der FROM-Anweisung eine CROSS JOIN-Kartesische Produktoperation für die Tabellen „Student“ und „Class“ durch, um die virtuelle Tabelle vt 1-1 zu erhalten.
  2. Durch ON-Screening wird eine Filterung auf der Grundlage von vt1-1 durchgeführt und dann die Tabelle vt 1-2 erhalten;
  3. Fügen Sie eine externe Zeile hinzu. Wenn Left Join, Right Join und Full Join verwendet werden, sind externe Zeilen beteiligt und externe Zeilen werden auf der Grundlage von vt1-2 hinzugefügt, um vt1-3 zu erhalten.
  4. Wenn mehr als zwei Tabellen vorhanden sind, werden die obigen Schritte wiederholt.
  5. Nachdem die endgültigen Tabellendaten von vt1 abgerufen wurden, wird die Filterphase nach WHERE ausgeführt, um die Tabelle vt2 zu erhalten.
  6. Dann gehen wir zur GRUPPEN-Phase und gruppieren sie, um vt3 zu erhalten.
  7. Anschließend werden in der HAVING-Phase die gruppierten Daten gefiltert, um vt4 zu erhalten.
  8. Dann betreten wir die SELECT-Phase, um die erforderlichen Felder zu extrahieren und vt5-1 zu erhalten. Dann durchlaufen wir die DISTINCT-Phase, um die doppelten Zeilen herauszufiltern und vt5-2 zu erhalten.
  9. Sortieren Sie dann die angegebenen Felder und geben Sie die ORDER BY-Phase ein, um vt6 zu erhalten.
  10. Schließlich wird in der LIMIT-Phase die angegebene Zeile entsprechend vt7 herausgenommen, was das Endergebnis ist.

Wenn Funktionsberechnungen beteiligt sind, wie etwa sum(), werden die Berechnungen der Aggregatfunktion nach GROUP BY und vor HAVING ausgeführt.

Ausdrucksberechnungen wie Alter * 10 werden nach der HAVING-Phase und vor der SELECT-Phase berechnet.

  • Von hier aus können wir die erste Methode zur Verbesserung der SQL-Effizienz zusammenfassen:

Wenn Sie SELECT verwenden, geben Sie explizite Spalten anstelle von SELECT * an. Dadurch wird die Netzwerkübertragungsmenge reduziert.

Filtern mit WHERE

Bei der Verwendung der WHERE-Filterung gibt es drei gängige Methoden: Vergleichsoperatoren, logische Operatoren und Platzhalter.

Für Vergleichsoperatoren werden in der folgenden Tabelle häufig verwendete Operatoren angezeigt.

Bei logischen Operatoren können Sie mehrere Vergleichsoperatoren verbinden, um ein Screening mit mehreren Bedingungen durchzuführen. Häufig verwendete Operatoren sind die folgenden:

Es ist zu beachten, dass wenn AND und OR gleichzeitig auftreten, AND eine höhere Priorität hat und zuerst ausgeführt wird. Wenn (), Klammern vorhanden sind, haben sie die höchste Priorität.

Verwenden der Platzhalterfilterung:

wie: (%) steht für null oder mehr Zeichen, (_) steht für nur ein Zeichen

Funktion

Genau wie die in Programmiersprachen definierten Funktionen definiert auch SQL einige Funktionen zur einfachen Verwendung, wie z. B. Summe, Durchschnitt, Länge usw.

Allgemeine Funktionen werden hauptsächlich in die folgenden vier Kategorien unterteilt. Das Klassifizierungsprinzip basiert auf dem Datentyp beim Definieren der Spalte:

  • Arithmetische Funktionen:

  • Zeichenfolgenfunktionen

Es ist zu beachten, dass beim Vergleich von Datumsangaben mithilfe von Zeichenfolgen die Funktion DATE zum Vergleich verwendet werden sollte.

  • Datumsfunktionen

  • Konvertierungsfunktion:

Die CAST-Funktion führt bei der Konvertierung von Datentypen keine Rundung durch. Wenn der ursprüngliche Wert eine Dezimalzahl ist, wird bei der Konvertierung in eine Ganzzahl ein Fehler gemeldet.

Beim Konvertieren können Sie die Funktion DECIMAL(a,b) verwenden, um die Genauigkeit der Dezimalzahl anzugeben. Beispielsweise bedeutet DECIMAL(8,2), dass die Genauigkeit 8 Ziffern beträgt – die Dezimalzahl plus die Ganzzahl ergeben höchstens 8 Ziffern. Die maximale Anzahl an Dezimalstellen beträgt 2.

Konvertieren Sie es dann mit SELECT CAST(123.123 AS DECIMAL(8,2)).

Aggregatfunktionen

Normalerweise verwenden wir Aggregatfunktionen zum Zusammenfassen von Tabellendaten, wobei die Eingabe ein Datensatz und die Ausgabe ein einzelner Wert ist.

Es gibt fünf häufig verwendete Aggregatfunktionen:

Die Funktion COUNT erfordert besondere Aufmerksamkeit. Weitere Einzelheiten finden Sie in diesem Artikel.

So gruppieren Sie

Beim Zählen von Ergebnissen ist es häufig erforderlich, die Daten nach bestimmten Bedingungen zu gruppieren, was der Anweisung GROUP BY entspricht.

Zählen Sie beispielsweise die Anzahl der Schüler in jeder Klasse:

Wählen Sie class_id, COUNT(*) als student_count FROM student \
GRUPPE NACH Klassen-ID;

Auf GROUP BY können auch mehrere Spaltennamen folgen, um beispielsweise nach Klasse und Geschlecht zu gruppieren:

WÄHLEN Sie Klassen-ID, Geschlecht, ANZAHL(*) als Anzahl der Schüler FROM \
Student GRUPPE NACH Klassen-ID, Geschlecht;

Der Unterschied zwischen HAVING-Filterung und WHERE

Wie bei WHERE können Sie die gruppierten Daten filtern. Der Unterschied besteht darin, dass WHERE für Zeilen gilt, während HAVING für Gruppen gilt.

Darüber hinaus werden die von WHERE unterstützten Operationen auch von HAVING unterstützt.

So kannst du zum Beispiel nach Kursen mit mehr als 2 Personen filtern:

Wählen Sie class_id, COUNT(*) als student_count FROM student \ 
GRUPPE NACH Klassen-ID \ 
MIT Studentenzahl > 20;

Unterabfragen

In komplexeren Situationen werden häufig verschachtelte Abfragen ausgeführt, z. B. wenn nach dem Abrufen eines Ergebnisses dieses als Eingabe verwendet wird, um einen weiteren Satz von Ergebnissen abzurufen.

In SQL können Abfragen in korrelierte und nicht korrelierte Unterabfragen unterteilt werden.

Gehen Sie von folgender Tabellenstruktur aus:

-- ----------------------------
Tabelle löschen, wenn „Student“ vorhanden ist;
CREATE TABLE `student` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `name` varchar(20) NICHT NULL STANDARD '',
 `Alter` int(3) NICHT NULL,
 `sex` varchar(10) NICHT NULL STANDARD '',
 `class_id` int(11) NICHT NULL KOMMENTAR 'Klassen-ID',
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Aufzeichnungen des Studenten
-- ----------------------------
INSERT INTO `student` VALUES ('1', 'Student', 13, 'Student', '1');
INSERT INTO `student` VALUES ('3', 'Student', 11, 'Student', '1');
INSERT INTO `student` VALUES ('5', 'Student', 12, 'Student', '1');
INSERT INTO `student` VALUES ('7', 'Student', 11, 'Student', '1');
INSERT INTO `student` VALUES ('7', 'Student', 11, 'Student', '2');

-- ----------------------------
Tabelle löschen, wenn `student_activities` vorhanden ist;
CREATE TABLE `student_activities` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `name` varchar(20) NICHT NULL STANDARD '',
 `stu_id` int(11) NICHT NULL KOMMENTAR 'Klassen-ID',
 PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
INSERT INTO `student_activities` VALUES ('1', 'Museum', 1);
INSERT INTO `student_activities` VALUES ('3, 'Frühlingsausflug', 3);

Nicht korrelierte Unterabfragen

Die Unterabfrage fragt das Datenergebnis aus der Datentabelle ab. Wird dieses Datenergebnis nur einmal ausgeführt, dann dient dieses Datenergebnis als Bedingung für die als nächstes auszuführende Hauptabfrage.

Hier möchten wir die Namen der Schüler abfragen, die in derselben Klasse wie Hu Yi sind:

Wählen Sie Name aus Student, wo Klassen-ID = \
(SELECT class_id FROM student WHERE name='Student')

Hier finden wir zuerst Hu Yis Klasse, was nur eine Abfrage ist. Dann finden wir Schüler basierend auf der Klasse, was eine nicht korrelierte Unterabfrage ist.

Korrelierte Unterabfragen

Wenn die Unterabfrage mehrmals ausgeführt werden muss, wird eine Schleife verwendet, die mit der externen Abfrage beginnt, bei jeder Abfrage die Unterabfrage übergibt und dann die Ergebnisse an die externe Abfrage zurückgibt.

Lassen Sie uns beispielsweise die Namen der Schüler abfragen, die älter sind als das Durchschnittsalter in jeder Klasse:

WÄHLEN Sie Namen FROM Student als s1 WHERE Alter > 
	(SELECT AVG(Alter) FROM Student als s2, wobei s1.Klassen-ID = s2.Klassen-ID)

Ermitteln Sie hier anhand der Klasseninformationen jedes Schülers das Durchschnittsalter der entsprechenden Klasse und treffen Sie anschließend eine Beurteilung. Jedes Mal, wenn eine Unterabfrage ausgeführt wird, muss sie basierend auf der äußeren Abfrage berechnet werden. Eine solche Unterabfrage ist eine korrelierte Unterabfrage.

EXISTS-Unterabfrage

In korrelierten Unterabfragen wird es häufig zusammen mit EXISTS verwendet. Wird verwendet, um zu bestimmen, ob die Bedingung erfüllt ist. Wenn sie erfüllt ist, ist es „Wahr“, wenn sie nicht erfüllt ist, ist es „Falsch“.

Fragen Sie beispielsweise die Namen von Schülern ab, die an Schulaktivitäten teilgenommen haben:

WÄHLEN SIE NAME FROM Student als s, wobei \
	EXISTIERT (SELECT stu_id FROM student_activities als sa, wobei sa.stu_id=s.id)

Ähnlich bedeutet NOT EXISTS, dass es nicht existiert. Wenn es die Bedingung erfüllt, ist es FALSE, und wenn nicht, ist es True.

Fragen Sie beispielsweise die Namen von Schülern ab, die nicht an Schulaktivitäten teilgenommen haben:

WÄHLEN SIE NAME FROM Student als s, wobei \
	NICHT EXISTIERT (SELECT stu_id FROM student_activities as sa where sa.stu_id=s.id)

Vergleichsunterabfragen festlegen

Sie können Mengenoperatoren in Unterabfragen verwenden, um Ergebnisse zu vergleichen.

Lassen Sie uns mit IN die Namen der Schüler abfragen, die an Schulaktivitäten teilgenommen haben:

Wählen Sie den Namen aus dem Studenten aus, wobei die ID in (Wählen Sie die Studenten-ID aus den Studentenaktivitäten)

Unterschied zwischen EXISTS und IN

Da sowohl EXISTS als auch IN dieselbe Funktion erfüllen können, was ist der Unterschied zwischen ihnen?

Nehmen wir nun an, wir haben Tabelle A und Tabelle B, wobei sowohl A als auch B das Feld cc haben und der Index b+ für cc erstellt wird, wobei Tabelle A n Datensätze und Tabelle B m Indizes hat.

Der abstrakte Modus ist:

WÄHLEN SIE * VON A, WO cc IN (WÄHLEN SIE cc VON B)

WÄHLEN SIE * AUS A, WO EXISTIERT (WÄHLEN SIE cc AUS B, WO B.cc=A.cc)

Bei EXISTS wird die äußere Tabelle zunächst einzeln durchlaufen. Nachdem jedes Ergebnis der äußeren Tabelle erhalten wurde, wird es in die innere Tabelle der Unterabfrage gebracht, um festzustellen, ob der Wert vorhanden ist.

Der Pseudocode ähnelt dem folgenden:

für i in A
für j in B
wenn j.cc == i.cc:
Ergebnis zurückgeben

Betrachten Sie zunächst das Erscheinungsbild A. Jede Zeile muss durchlaufen werden, daher ist dies n-mal erforderlich. Bei der Abfrage der inneren Tabelle B beträgt die Abfrageeffizienz aufgrund der Verwendung des Index log(m) B + Baumhöhe statt m.

Der Gesamtwirkungsgrad beträgt also: n * log(m)

Wenn die Anzahl der Elemente in Tabelle A deutlich kleiner ist als die in Tabelle B, wird daher die Verwendung der EXISTS-Abfrage empfohlen.

Wenn wir uns IN noch einmal ansehen, wird zuerst die interne Tabelle B abgefragt und dann die externe Tabelle A zur Beurteilung herangezogen. Der Pseudocode lautet wie folgt:

für i in B
für j in A
wenn j.cc == i.cc:
Ergebnis zurückgeben

Da zuerst alle Daten in der inneren Tabelle durchsucht werden müssen, beträgt die erforderliche Anzahl m. Betrachtet man die äußere Tabelle A, kann n, da der cc-Index verwendet wird, zu log(n) vereinfacht werden, also m * log(n).

Wenn die Daten in Tabelle A wesentlich größer sind als die in Tabelle B, wird daher die Verwendung einer IN-Abfrage empfohlen.

Zusammenfassend wird für IN und EXISTS das Prinzip übernommen, eine kleine Tabelle zum Ansteuern einer großen Tabelle zu verwenden.

Hier gehen wir näher auf den Unterschied zwischen NOT EXISTS und NOT IN ein:

WÄHLEN SIE * VON A, WO cc NICHT IN (WÄHLEN SIE cc VON B) 

WÄHLEN SIE * AUS A, WO NICHT EXISTIERT (WÄHLEN SIE cc AUS B, WO B.cc=A.cc)

Für NOT EXITS kann, wie auch für EXISTS, der Index von cc für die innere Tabelle verwendet werden. Gilt, wenn Tabelle A kleiner als Tabelle B ist.

Aber für NOT IN ist es anders als IN. Da cc mit einem Index festgelegt ist, kann cc IN (1, 2, 3) in WHERE cc=1 OR cc=2 OR cc=3 umgewandelt werden, und der cc-Index kann normal verwendet werden. Für NOT IN wird es jedoch in cc! = 1 ODER cc! = 2 ODER cc! = 3 umgewandelt. Da es sich zu diesem Zeitpunkt um eine Ungleichheitsabfrage handelt, kann der Index nicht verwendet werden und die gesamte Tabelle wird gescannt.

Das heißt, wenn ein Index festgelegt wird, ist NOT EXISTS effizienter als NOT IN.

Im Fall ohne Index sind IN und OR jedoch unterschiedlich:

1. Verschiedene Operationen
1. in: in ist eine Hash-Verbindung zwischen der übergeordneten Abfragetabelle und der untergeordneten Abfragetabelle.
2. oder: oder führt eine Schleife für die übergeordnete Abfragetabelle aus und fragt bei jeder Wiederholung der Schleife die untergeordnete Abfragetabelle erneut ab.

2. Verschiedene Anwendungsszenarien
1. in: in eignet sich für Situationen, in denen die Unterabfragetabelle mehr Daten enthält als die übergeordnete Abfragetabelle.
2. oder: oder eignet sich für Situationen, in denen die Daten in der Unterabfragetabelle weniger sind als die in der übergeordneten Abfragetabelle.

3. Unterschiedliche Effizienz
1. in: Ohne Index nimmt die Ausführungseffizienz von in nicht wesentlich ab, wenn die Datenmenge nach in zunimmt.
2. oder: Ohne Index verringert sich die Ausführungseffizienz von oder erheblich, wenn die Datenmenge nach oder zunimmt.

Zusammenfassen

Dieser Artikel fasst hauptsächlich einige grundlegende Kenntnisse zu SQL zusammen:

Wenn Sie SELECT-Abfragen verwenden, können Sie durch explizites Angeben der Spaltennamen die IO-Übertragung reduzieren und die Effizienz verbessern.

Und es ist zu beachten, dass der SELECT-Abfrageprozess bei FROM beginnt und bei LIMIT endet. Das Verständnis des Gesamtprozesses kann uns helfen, SQL besser zu organisieren.

Anschließend werden die WHERE-Filteroperatoren und häufig verwendeten Funktionen ausführlich vorgestellt. Dabei ist zu beachten, dass die DATE-Funktion beim Zeitvergleich verwendet werden sollte und wie Daten gruppiert und gefiltert werden.

Abschließend werden die anwendbaren Szenarien von Unterabfragen, IN und EXISTS hervorgehoben.

Oben finden Sie Einzelheiten zum schnellen Erlernen der MySQL-Grundlagen. Weitere Informationen zu den MySQL-Grundlagen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Zusammenfassung der grundlegenden Kenntnisse zur MySql-Datenbank
  • Eine Zusammenfassung nach dem Erlernen von MySQL (Grundlagen)
  • Grundlegende Befehle für MySQL-Datenbanken (Sammlung)
  • Einführung in MySQL (I) Grundlegende Operationen von Datentabellen und Datenbanken
  • Tutorials der MySQL-Reihe für Anfänger

<<:  JavaScript implementiert die Operationen „Alle auswählen“ und „Alle abwählen“

>>:  So prüfen Sie, ob ein Port in LINUX belegt ist

Artikel empfehlen

Beschreiben Sie kurz den Unterschied zwischen MySQL und Oracle

1. Oracle ist eine große Datenbank, während MySQL...

Eine kleine Einführung in die Verwendung der Position in HTML

Ich habe gestern gerade etwas HTML gelernt und kon...

Herausforderung des HTML-Symbol-zu-Entity-Algorithmus

Herausforderung: Wandelt die Zeichen &, <,...

CentOS 7-Methode zum Ändern des Gateways und Konfigurieren des IP-Beispiels

Wählen Sie bei der Installation der CentOS7-Versi...

Beispielcode für CSS-Bildanimationseffekte (Fotorahmen)

Dieser Artikel stellt den Beispielcode für CSS-Bi...

Der Unterschied zwischen div und span in HTML (Gemeinsamkeiten und Unterschiede)

Gemeinsamkeiten: Das DIV-Tag und das SPAN-Tag beh...

Über die „Berufskrankheit“ der Designer

Ich habe immer das Gefühl, dass Designer die sens...

Beispielcode für die programmgesteuerte Verarbeitung von CSS-Stilen

Vorteile eines programmatischen Ansatzes 1. Globa...

CSS verwendet die BEM-Namenskonvention

Welche Informationen möchten Sie erhalten, wenn S...

Schritte zum Übertragen von Dateien und Ordnern zwischen zwei Linux-Servern

Heute habe ich mich mit der Migration eines Proje...

Beispielcode zur Implementierung der Formularvalidierung mit reinem CSS

In unserem täglichen Geschäft ist die Formularval...

Css3 realisiert nahtloses Scrollen und Anti-Shake

Frage Das nahtlose Scrollen von Bildern und Texte...

JavaScript-Einzelthread und asynchrone Details

Inhaltsverzeichnis 1. Aufgabenwarteschlange 2. Um...