Lernen Sie MySQL-Datenbanken in einer Stunde (Zhang Guo)

Lernen Sie MySQL-Datenbanken in einer Stunde (Zhang Guo)

Mit dem Ende des mobilen Internets und dem Aufkommen künstlicher Intelligenz sind Big Data immer wichtiger geworden. Der nächste erfolgreiche Mensch sollte derjenige sein, der über riesige Datenmengen verfügt. Sie sollten sich mit Daten und Datenbanken auskennen.

1. Datenbankübersicht

Eine Datenbank ist ein Softwaresystem, das Daten speichert und verwaltet, genau wie ein Logistiklager zur Speicherung von Daten.

In der Geschäftswelt bedeuten Informationen Geschäftsmöglichkeiten. Eine sehr wichtige Möglichkeit, an Informationen zu gelangen, ist die Analyse und Verarbeitung von Daten. Dies hat zu einer Vielzahl professioneller Datenverwaltungssoftware geführt, und Datenbanken sind eine davon. Natürlich wurde das Datenbankmanagementsystem nicht auf einen Schlag geschaffen. Es hat eine kontinuierliche Erweiterung und Entwicklung erfahren, bis es das geworden ist, was es heute ist.

1.1 Entwicklungsgeschichte

1.1.1. Phase der manuellen Verarbeitung Vor Mitte der 1950er Jahre, als Computer erstmals erfunden wurden, war ihre Verarbeitungsleistung sehr begrenzt und sie konnten nur einige einfache Berechnungen durchführen. Ihre Datenverarbeitungskapazitäten waren ebenfalls sehr begrenzt, was bedeutete, dass Computer damals nur für wissenschaftliche und technische Berechnungen verwendet werden konnten. Auf dem Computer gibt es keine spezielle Software zur Verwaltung der Daten. Die Daten werden vom Computer oder dem Programm, das sie verarbeitet, übertragen. Wenn sich das Datenspeicherformat, der Lese- und Schreibpfad oder die Methode ändern, muss das Verarbeitungsprogramm auch entsprechende Änderungen vornehmen, um die Korrektheit des Programms aufrechtzuerhalten.

1.1.2 Dateisystem
Mit der Entwicklung der Hard- und Softwaretechnologie wurden Computer von den späten 1950er- bis in die Mitte der 1960er-Jahre nicht mehr nur für wissenschaftliche Berechnungen eingesetzt, sondern fanden auch in der Unternehmensführung breite Anwendung. In dieser Zeit wurden Daten und Programme hinsichtlich ihres Speicherorts vollständig getrennt und Daten in separaten Dateien organisiert und auf externen Speichergeräten gespeichert, sodass Datendateien von mehreren verschiedenen Programmen gleichzeitig verwendet werden konnten.
Obwohl Programme und Daten nach Speicherorten getrennt sind und das Betriebssystem uns bei der Verwaltung des Speicherorts und des Zugriffspfads der Daten helfen kann, wird das Programmdesign immer noch durch das Datenspeicherformat und die Datenspeichermethode beeinflusst, kann nicht vollständig unabhängig von den Daten sein und die Datenredundanz ist relativ groß.

1.1.3. Datenbankverwaltungssystem Seit den 1970er Jahren hat die Computerhardware- und -softwaretechnologie eine rasante Entwicklung durchgemacht. Die wichtigste Entwicklung in dieser Zeit ist die Entstehung eines echten Datenbankverwaltungssystems, das wirklich einheitliche Schnittstellen und Datenaustausch zwischen Anwendungen und Daten ermöglicht. Auf diese Weise können Anwendungen direkt und einheitlich mit Daten arbeiten, d. h. Anwendungen und Daten verfügen über ein hohes Maß an Unabhängigkeit.

1.2. Gängige Marken, Dienste und Architekturen für Datenbanktechnologien

Nach so vielen Jahren der Entwicklung sind viele Datenbanksysteme auf dem Markt erschienen. Ich persönlich denke, dass Oracle das stärkste ist. Natürlich gibt es noch viele andere, wie z. B. DB2, Microsoft SQL Server, MySQL, SyBase usw. Die folgende Abbildung listet gängige Marken, Dienste und Architekturen der Datenbanktechnologie auf.

1.3 Datenbankklassifizierung

Datenbanken werden üblicherweise in drei Typen unterteilt: hierarchische Datenbanken, Netzwerkdatenbanken und relationale Datenbanken.

Verschiedene Datenbanken sind miteinander verbunden und nach unterschiedlichen Datenstrukturen organisiert.

Im heutigen Internet gibt es hauptsächlich zwei Typen gängiger Datenbankmodelle: relationale Datenbanken und nicht-relationale Datenbanken.

1.3.1 Relationale Datenbank

Derzeit sind relationale Datenbanken immer noch die Hauptdatenbanken, die in ausgereiften Anwendungen und Diensten sowie verschiedenen Systemen verwendet werden.

Vertreter: Oracle, SQL Server, MySQL

1.3.2. Nicht-relationale Datenbanken Mit dem Fortschritt der Zeit und dem Bedarf an Entwicklung entstanden nicht-relationale Datenbanken.

Vertreter: Redis, Mongodb

NoSQL-Datenbanken bieten Vorteile hinsichtlich Speichergeschwindigkeit und Flexibilität und werden auch häufig für die Zwischenspeicherung verwendet.

1.4. Datenbanknormalisierung <br /> Nach einer Reihe von Schritten haben wir die Anforderungen des Kunden schließlich in Datentabellen umgewandelt und die Beziehung zwischen diesen Tabellen hergestellt. Können wir sie jetzt in der Entwicklung verwenden? Die Antwort ist nein, warum? Im selben Projekt sind viele Personen an der Bedarfsanalyse und dem Datenbankdesign beteiligt. Unterschiedliche Personen haben unterschiedliche Ideen und unterschiedliche Abteilungen haben unterschiedliche Geschäftsanforderungen. Die von uns entworfene Datenbank wird zwangsläufig viele identische Daten enthalten, und es kann zu Konflikten in der Struktur kommen, was zu Unannehmlichkeiten bei der Entwicklung führt.

1.4.1. Was ist ein Paradigma? Um eine normalisierte Datenbank zu entwerfen, müssen wir dem Datenbankdesign-Paradigma folgen, also den Standardprinzipien des Datenbankdesigns. Das Paradigma kann uns dabei helfen, die Datenbanktabellenstruktur besser zu gestalten und redundante Daten zu reduzieren und so die Speichereffizienz, Datenintegrität und Skalierbarkeit der Datenbank zu verbessern.

Beim Entwurf einer relationalen Datenbank müssen wir verschiedene Spezifikationen und Anforderungen erfüllen, um eine sinnvolle relationale Datenbank zu entwerfen. Diese unterschiedlichen Spezifikationen werden als unterschiedliche Paradigmen bezeichnet. Verschiedene Paradigmen stellen Unterparadigmen dar. Je höher das Paradigma, desto weniger Redundanz hat die Datenbank. Derzeit gibt es sechs Paradigmen für relationale Datenbanken: erstes Paradigma (1NF), zweites Paradigma (2NF), drittes Paradigma (3NF), Badesco-Paradigma (BCNF), viertes Paradigma (4NF) und fünftes Paradigma (5NF, auch als perfektes Paradigma bekannt). Die minimale Normalform ist die erste Normalform (1NF). Die erste Normalform, die mehr Spezifikationsanforderungen erfüllt, wird als zweite Normalform (2NF) bezeichnet und die verbleibenden Normalformen sind ähnlich. Im Allgemeinen muss die Datenbank nur die dritte Normalform (3NF) erfüllen.

1.4.2. Drei große Paradigmen

Erste Normalform (1NF)

Die sogenannte erste Normalform (1NF) bezieht sich auf eine Spezifikationsanforderung, die Spalten im relationalen Modell hinzugefügt wird. Alle Spalten sollten atomar sein, d. h. jede Spalte in der Datenbanktabelle ist ein unteilbares atomares Datenelement und kann kein nicht-atomares Datenelement wie Sammlungen, Arrays und Datensätze sein. Das heißt, wenn ein Attribut in einer Entität mehrere Werte hat, muss es in verschiedene Attribute aufgeteilt werden. Jeder Domänenwert in einer Tabelle, die der ersten Normalform (1NF) entspricht, kann nur ein Attribut oder Teil eines Attributs der Entität sein. Kurz gesagt ist die erste Normalform eine Domäne ohne Duplikation.

Beispiel: In Tabelle 1-1 kann die Spalte „Projektadresse“ auch nach Provinzen, Städten usw. unterteilt werden. Im Ausland gibt es mehr Programme, die die Spalte „Name“ auch in zwei Spalten aufteilen, nämlich „Nachname“ und „Vorname“.

Obwohl die erste Normalform erfordert, dass jede Spalte ihre Atomizität behält und nicht weiter unterteilt werden kann, hängt diese Anforderung mit unseren Anforderungen zusammen. In der obigen Tabelle haben wir beispielsweise keine Abfrage- und Anwendungsanforderungen für Provinzen und Städte für die „Projektadresse“, sodass keine Unterteilung erforderlich ist. Gleiches gilt für die Spalte „Name“.

Tabelle 1-1 Ursprüngliche Tabelle

Projekt-Nr.

Projektname

Projektadresse

Mitarbeiternummer

Name des Mitarbeiters

Gehalt

Position

P001

Hongkong-Zhuhai-Macao-Brücke

Zhuhai, Guangdong

E0001

Jack

6000/Monat

Arbeitnehmer

P001

Hongkong-Zhuhai-Macao-Brücke

Zhuhai, Guangdong

E0002

Verbinden

7800/Monat

Arbeitnehmer

P001

Hongkong-Zhuhai-Macao-Brücke

Zhuhai, Guangdong

E0003

Apfel

8000/Monat

Leitender Techniker

P002

Luft- und Raumfahrt im Südchinesischen Meer

Sanya, Hainan

E0001

Jack

5000/Monat

Arbeitnehmer

Zweite Normalform (2NF)

Auf der Grundlage von 1NF müssen Nicht-Schlüsselattribute vollständig vom Primärschlüssel abhängig sein. Die zweite Normalform (2NF) basiert auf der ersten Normalform (1NF), d. h. um die zweite Normalform (2NF) zu erfüllen, muss zuerst die erste Normalform (1NF) erfüllt sein. Die zweite Normalform (2NF) erfordert, dass jede Instanz oder jeder Datensatz in einer Datenbanktabelle eindeutig unterscheidbar sein muss. Wählen Sie ein Attribut oder eine Gruppe von Attributen aus, die jede Entität als eindeutige Kennung der Entität unterscheiden können.

Die zweite Normalform (2NF) erfordert, dass die Attribute einer Entität vollständig vom Primärschlüssel abhängig sind. Die sogenannte vollständige Abhängigkeit bedeutet, dass es kein Attribut geben kann, das nur von einem Teil des Primärschlüssels abhängt. Wenn es eines gibt, sollten dieses Attribut und dieser Teil des Primärschlüssels getrennt werden, um eine neue Entität zu bilden. Zwischen der neuen Entität und der ursprünglichen Entität besteht eine Eins-zu-viele-Beziehung. Um diese Unterscheidung zu erreichen, müssen Sie der Tabelle normalerweise eine Spalte hinzufügen, um die eindeutige Kennung jeder Instanz zu speichern. Kurz gesagt basiert das zweite Paradigma auf dem ersten Paradigma und die Attribute sind vollständig vom Primärschlüssel abhängig.

Beispiel: In Tabelle 1-1 werden in einer Tabelle Projektinformationen, Mitarbeiterinformationen usw. beschrieben. Dies führt zu zahlreichen Datenduplizierungen. Gemäß der zweiten Normalform können wir Tabelle 1-1 in Tabelle 1-2 und Tabelle 1-3 aufteilen:

l Projektinformationstabelle: (Projektnummer, Projektname, Projektadresse):

Tabelle 1-2 Projektinformationstabelle

Projekt-Nr.

Projektname

Projektadresse

P001

Hongkong-Zhuhai-Macao-Brücke

Zhuhai, Guangdong

P002

Luft- und Raumfahrt im Südchinesischen Meer

Sanya, Hainan

l Mitarbeiterinformationstabelle (Mitarbeiternummer, Name des Mitarbeiters, Position, Gehaltsstufe):

Tabelle 1-3 Mitarbeiterinformationstabelle

Mitarbeiternummer

Name des Mitarbeiters

Position

Gehaltsstufe

E0001

Jack

Arbeitnehmer

3000/Monat

E0002

Verbinden

Arbeitnehmer

3000/Monat

E0003

Apfel

Leitender Techniker

6000/Monat

Auf diese Weise werden aus Tabelle 1-1 zwei Tabellen, die jeweils nur eine Sache klar und präzise beschreiben.

Dritte Normalform (3NF)

Die dritte Normalform geht einen Schritt weiter als die zweite Normalform. Das Ziel der dritten Normalform besteht darin, sicherzustellen, dass jede Spalte in der Tabelle direkt und nicht nur indirekt mit der Primärschlüsselspalte verknüpft ist. Das heißt, jede Spalte hat eine direkte Abhängigkeitsbeziehung mit der Primärschlüsselspalte, die die dritte Normalform erfüllt.

Die dritte Normalform erfordert, dass jede Spalte direkt mit der Primärschlüsselspalte verknüpft ist. Wir können das folgendermaßen verstehen: Angenommen, Zhang San ist Li Sis Soldat und Wang Wu ist Zhang Sans Soldat. Ist Wang Wu dann Li Sis Soldat? Aus dieser Beziehung können wir erkennen, dass Wang Wu auch Li Sis Soldat ist, denn Wang Wu ist von Zhang San abhängig und Zhang San ist Li Sis Soldat, also ist Wang Wu auch Li Sis Soldat. Hier besteht eine indirekte Abhängigkeitsbeziehung und nicht die direkte Abhängigkeit, die in unserem dritten Paradigma betont wird.

Schauen wir uns nun die Erklärung der zweiten Normalform an, bei der wir Tabelle 1-1 in zwei Tabellen aufteilen. Entsprechen diese beiden Tabellen der dritten Normalform? Die Mitarbeiterinformationstabelle enthält: „Mitarbeiternummer“, „Mitarbeitername“, „Position“ und „Gehaltsstufe“. Wie wir wissen, wird die Gehaltsstufe durch die Position bestimmt. Hier ist die „Gehaltsstufe“ über die „Position“ mit dem Mitarbeiter verknüpft, was nicht der dritten Normalform entspricht. Wir müssen die Mitarbeiterinformationstabelle wie folgt weiter aufteilen:

l Mitarbeiterinformationstabelle: Mitarbeiternummer, Mitarbeitername, Position

l Stellentabelle: Stellennummer, Stellenbezeichnung, Gehaltsstufe

Nachdem wir nun die drei Paradigmen des Datenbanknormalisierungsdesigns verstanden haben, werfen wir einen Blick auf die optimierte Datentabelle in Tabelle 1-1:

Mitarbeiterinformationstabelle (Mitarbeiter)

Mitarbeiternummer

Name des Mitarbeiters

Job-Nr.

E0001

Jack

1

E0002

Verbinden

1

E0003

Apfel

2

Projektinformationstabelle (ProjectInfo)

Projekt-Nr.

Projektname

Projektadresse

P001

Hongkong-Zhuhai-Macao-Brücke

Zhuhai, Guangdong

P002

Luft- und Raumfahrt im Südchinesischen Meer

Sanya, Hainan

Pflicht

Job-Nr.

Berufsbezeichnung

Gehalt

1

Arbeitnehmer

3000/Monat

2

Leitender Techniker

6000/Monat

Datenblatt für Projektteilnehmer (Project_Employee_info)

Seriennummer

Projekt-Nr.

Personalnummer

1

P001

E0001

2

P001

E0002

3

P002

E0003

Durch Vergleichen haben wir festgestellt, dass es mehr Tabellen gibt, die Beziehungen komplizierter sind, das Abfragen von Daten schwieriger wird und auch der Programmieraufwand zugenommen hat. Der Inhalt in jeder Tabelle ist jedoch klarer, es gibt weniger doppelte Daten und Aktualisierung und Wartung sind einfacher geworden. Wie lässt sich dieser Widerspruch also ausgleichen?

1.4.3. Paradigma und Effizienz

Wenn wir eine Datenbank entwerfen, gibt es zwischen Designern, Kunden und Entwicklern normalerweise gewisse Konflikte hinsichtlich des Datenbankdesigns. Kunden bevorzugen Bequemlichkeit und klare Ergebnisse, und Entwickler hoffen auch, dass die Datenbankbeziehungen relativ einfach sind, um den Entwicklungsaufwand zu verringern. Designer müssen die drei Hauptparadigmen anwenden, um die Datenbank strikt zu normalisieren, Datenredundanz zu reduzieren und die Wartbarkeit und Skalierbarkeit der Datenbank zu verbessern. Daraus können wir ersehen, dass sich unser Datenbankdesign von dem der Kunden und Entwickler unterscheiden wird, um die drei Hauptparadigmen zu erfüllen. Daher können wir beim tatsächlichen Datenbankdesign nicht blindlings eine Normalisierung anstreben. Wir müssen die drei Hauptparadigmen berücksichtigen, Datenredundanz und verschiedene Anomalien beim Datenbankbetrieb reduzieren und die Leistungsprobleme der Datenbank umfassend berücksichtigen, um eine angemessene Datenbankredundanz zu ermöglichen.

2. Einführung in MySQL

2.1. MySQL-Übersicht

MySQL ist ein relationales Datenbankverwaltungssystem, das vom schwedischen Unternehmen MySQL AB entwickelt wurde und derzeit ein Produkt von Oracle ist. MySQL ist eines der beliebtesten relationalen Datenbankverwaltungssysteme. Im Hinblick auf Webanwendungen ist MySQL eine der besten RDBMS-Anwendungssoftwares (Relational Database Management System).

MySQL ist ein relationales Datenbankverwaltungssystem, das Daten in verschiedenen Tabellen speichert, anstatt alle Daten in einem großen Lager abzulegen, was die Geschwindigkeit und Flexibilität erhöht.

Die von MySQL verwendete SQL-Sprache ist die am häufigsten verwendete standardisierte Sprache für den Zugriff auf Datenbanken. MySQL-Software verwendet eine duale Lizenzierungsrichtlinie und ist in eine Community Edition und eine kommerzielle Edition unterteilt. Aufgrund seiner geringen Größe, hohen Geschwindigkeit, niedrigen Gesamtbetriebskosten und insbesondere seines Open Source-Charakters wird MySQL im Allgemeinen als Website-Datenbank für die Entwicklung kleiner und mittelgroßer Websites gewählt.

Offizielle MySQL-Website: https://www.mysql.com/

MySQL-Download: https://www.mysql.com/downloads/

2.2 Systemeigenschaften

1. Es ist in C und C++ geschrieben und mit einer Vielzahl von Compilern getestet, um die Portabilität des Quellcodes sicherzustellen.

2. Unterstützt mehrere Betriebssysteme wie AIX, FreeBSD, HP-UX, Linux, Mac OS, NovellNetware, OpenBSD, OS/2 Wrap, Solaris, Windows usw.

3. Es werden APIs für mehrere Programmiersprachen bereitgestellt. Zu diesen Programmiersprachen gehören C, C++, Python, Java, Perl, PHP, Eiffel, Ruby, .NET und Tcl usw.

4. Unterstützt Multithreading, um die CPU-Ressourcen voll auszunutzen.

5. Optimierter SQL-Abfragealgorithmus verbessert effektiv die Abfragegeschwindigkeit.

6. Es kann als separate Anwendung in einer Client-Server-Netzwerkumgebung verwendet oder als Bibliothek in andere Software eingebettet werden.

7. Bietet Unterstützung für mehrere Sprachen. Gängige Kodierungen wie Chinesisch GB 2312, BIG5, Japanisch Shift_JIS usw. können als Datentabellennamen und Datenspaltennamen verwendet werden.

8. Bietet mehrere Datenbankverbindungsmethoden wie TCP/IP, ODBC und JDBC.

9. Bietet Verwaltungstools zum Verwalten, Überprüfen und Optimieren von Datenbankvorgängen.

10. Unterstützt große Datenbanken. Kann große Datenbanken mit mehreren zehn Millionen Datensätzen verarbeiten.

11. Unterstützt mehrere Speicher-Engines.

12.MySQL ist Open Source, Sie müssen daher keine zusätzlichen Gebühren zahlen.

13.MySQL verwendet das Standardformat der SQL-Datensprache.

14. MySQL bietet gute Unterstützung für PHP, die derzeit beliebteste Webentwicklungssprache.

15.MySQL ist anpassbar und verwendet das GPL-Protokoll. Sie können den Quellcode ändern, um Ihr eigenes MySQL-System zu entwickeln.

16. Online-DDL/Änderungsfunktion, Datenarchitektur unterstützt dynamische Anwendungen und Entwicklerflexibilität (neu in 5.6)

17. Replizieren Sie globale Transaktionskennungen, um selbstheilende Cluster zu unterstützen (neu in 5.6)

18. Replikation ohne Absturz von Slaves kann die Verfügbarkeit verbessern (neu in 5.6)

19. Replizieren Sie Multithread-Slaves, um die Leistung zu verbessern (neu in 5.6)

20,3-mal schnellere Leistung (neu in 5.7)

21. Neuer Optimierer (neu in 5.7)

22. Native JSON-Unterstützung (neu in 5.7)

23.Multi-Source-Replikation (neu in 5.7)

24. Räumliche Erweiterung von GIS (neu in 5.7)

2.3 Speicher-Engine

MySQL-Datenbanken haben je nach Anwendungsbedarf unterschiedliche Engines vorbereitet. Unterschiedliche Engines haben unterschiedliche Schwerpunkte. Die Unterschiede sind wie folgt:

MyISAM ist die Standarddatenbank-Engine vor MySQL 5.0 und wird am häufigsten verwendet. Es verfügt über eine höhere Einfüge- und Abfragegeschwindigkeit, unterstützt jedoch keine Transaktionen.

InnoDB ist die bevorzugte Engine für Transaktionsdatenbanken. Es unterstützt ACID-Transaktionen und Zeilensperren. Seit MySQL 5.5 ist es die Standarddatenbank-Engine.

BDB ist von Berkeley DB abgeleitet, einer anderen Wahl für Transaktionsdatenbanken, die andere Transaktionsfunktionen wie Commit und Rollback unterstützt.

Memory ist eine Speicher-Engine, die alle Daten mit extrem hoher Einfüge-, Aktualisierungs- und Abfrageeffizienz im Speicher speichert. Der Speicherplatz wird jedoch proportional zur Datenmenge beansprucht. und sein Inhalt geht beim Neustart von MySQL verloren.

Merge kombiniert eine bestimmte Anzahl von MyISAM-Tabellen zu einem Ganzen, was für die Speicherung extrem großer Datenmengen sehr nützlich ist.

Das Archiv eignet sich sehr gut zum Speichern großer Mengen unabhängiger historischer Daten. Weil sie nicht oft gelesen werden. Das Archiv hat eine hohe Einfügegeschwindigkeit, aber seine Abfrageunterstützung ist relativ schlecht

Federated kombiniert verschiedene MySQL-Server zu einer logisch vollständigen Datenbank. Ideal für verteilte Anwendungen

Cluster/NDB ist eine hochredundante Speicher-Engine, die mehrere Datenmaschinen nutzt, um gemeinsam Dienste bereitzustellen und so die Gesamtleistung und Sicherheit zu verbessern. Geeignet für Anwendungen mit großen Datenmengen, hohen Sicherheits- und Leistungsanforderungen

CSV ist eine Speicher-Engine, die Daten logisch durch Kommas trennt. Es wird für jede Tabelle im Datenbankunterverzeichnis eine CSV-Datei erstellt. Dies ist eine normale Textdatei, in der jede Datenzeile eine Textzeile einnimmt. Die CSV-Speicher-Engine unterstützt keine Indizes.

BlackHole Black Hole-Engine, alle geschriebenen Daten verschwinden, im Allgemeinen wird sie zum Aufzeichnen des Binärprotokolls für das Replikations-Relay verwendet

Die EXAMPLE-Speicher-Engine ist eine Stub-Engine, die nichts tut. Es soll als Beispiel im MySQL-Quellcode demonstrieren, wie Sie mit dem Schreiben einer neuen Speicher-Engine beginnen. Auch hier gilt das Hauptinteresse den Entwicklern. Die EXAMPLE-Speicher-Engine unterstützt keine Indizierung.

Darüber hinaus ist die Speicher-Engine-Schnittstelle von MySQL gut definiert. Interessierte Entwickler können ihre eigene Speicher-Engine schreiben, indem sie die Dokumentation lesen.

3. MySQL-Datenbank schnell installieren und ausführen

MySQL war früher Open Source und kostenlos, aber nach der Übernahme durch Oracle gab es einige Änderungen: Die vorherigen Versionen waren alle kostenlos, die Community Edition war Open Source und unter der GPL-Vereinbarung kostenlos und die kommerzielle Edition bot umfangreichere Funktionen, war aber kostenpflichtig.

Download-Adresse der Community Edition: https://dev.mysql.com/downloads/ (kostenlos)

Downloadadresse der Enterprise Edition: https://www.mysql.com/downloads/ (kostenpflichtig)

3.1. Verwenden Sie die grüne Version

Um MySQL bequem und schnell verwenden zu können, habe ich ein grünes MySQL vorbereitet, das nach der Dekomprimierung ohne Konfiguration direkt verwendet werden kann.

Download-Adresse 1: https://pan.baidu.com/s/1hrS5KUw Passwort: sug9

Downloadadresse 2: https://www.jb51.net/softs/594937.html

Direkt nach dem Download entpacken:

Klicken Sie hier, um PStart.exe zu starten, ein kleines Tool zum Anpassen von Menüs und Organisieren von Ressourcen.

Es gibt zwei grüne Versionen der MySQL-Software 5.0 und 5.5

Navicat für MySQL ist ein Datenbank-Client-Verwaltungstool

Das Ergebnis nach dem Klicken zum Starten von PStart.exe ist wie folgt:

Klicken Sie, um den MySQL-Dienst zu starten und Navicat für MySQL auszuführen.

*Hinweis: Der obige PStart ist nur ein Tool zum Organisieren von Dokumenten und nicht erforderlich. Wenn beim Starten ein Fehler auftritt oder es leer ist, können Sie es direkt beenden und den MySQL-Dienst direkt starten, z. B.:

mysql_start.bat wird zum Starten der MySql-Datenbank verwendet und mysql_stop.bat wird zum Herunterfahren der MySql-Datenbank verwendet.

Die Entwicklungstools werden auf die gleiche Weise wie folgt gestartet:

navicat.exe wird zum Starten des Navicat-Datenbankclients verwendet. Am besten senden Sie eine Verknüpfung an den Desktop, um sich das Öffnen des Ordners bei jedem Mal zu ersparen.

3.1.1, MySQL-Remotezugriff einrichten

Führen Sie den MySQL-Befehl aus, um in den MySQL-Befehlsmodus zu wechseln und den folgenden SQL-Code auszuführen

mysql> mysql verwenden; 
mysql> GRANT ALL ON *.* TO admin@'%' IDENTIFIZIERT DURCH 'admin' MIT GRANT-OPTION;

#Dieser Satz bedeutet, dass jeder Computer mit jeder IP-Adresse (das % oben bedeutet dies) mit dem Administratorkonto und dem Kennwort (admin) auf diesen MySQL-Server zugreifen kann.
#Sie müssen ein solches Konto hinzufügen, um sich remote anzumelden. Mit dem Root-Konto ist keine Remote-Anmeldung möglich, nur die lokale Anmeldung ist möglich.

3.1.2. Ändern Sie das MySQL-Benutzerkennwort

1.mysqladmin-Befehl

Das Format ist wie folgt (USER ist der Benutzername und PASSWORD ist das neue Passwort):

mysqladmin -u USER -p password PASSWORD

Nach diesem Befehl werden Sie aufgefordert, das ursprüngliche Passwort einzugeben. Sie können es nach korrekter Eingabe ändern.
Wenn Sie beispielsweise das Passwort des Root-Benutzers auf 123456 setzen,

mysqladmin -u root -p password 123456

2. UPDATE-Benutzeranweisung

Bei dieser Methode müssen Sie sich zunächst mit dem Root-Konto bei MySQL anmelden und dann Folgendes ausführen:

UPDATE-Benutzer SET-Passwort=PASSWORT('123456') WHERE-Benutzer='root'; FLUSH-PRIVILEGIEN;

3. SET PASSWORD-Anweisung

Auch bei dieser Methode müssen Sie sich zunächst mit dem Root-Befehl bei MySQL anmelden und dann Folgendes ausführen:

SET PASSWORD FOR root=PASSWORD('123456');

4. Wenn das Root-Passwort verloren geht

Verwenden Sie ein mit MySQL mitgeliefertes Tool, „MySQL GUI Tools“. Ich habe immer Version 5.0 verwendet. Führen Sie das Programm MySQLSystemTrayMonitor.exe im Installationsverzeichnis aus. Nach dem Ausführen wird ein Symbol in der Taskleiste angezeigt. Wenn der MySQL-Dienst nicht installiert wurde, wird er nicht angezeigt. Sie können den Dienst zunächst über Aktion > MySQL-Instanzen verwalten konfigurieren und installieren. Wenn der Dienst installiert wurde, klicken Sie mit der rechten Maustaste und das Menü „Instanz konfigurieren“ wird angezeigt. Nach dem Klicken erscheint das folgende MySQL-Administratorfenster:

Wenn die ursprüngliche Dienstkonfiguration normal ist, wählen Sie in der Liste links „Startvariablen“, wählen Sie im entsprechenden Reiter rechts „Sicherheit“, aktivieren Sie „Berechtigungstabelle deaktivieren“ und klicken Sie dann auf „Änderungen übernehmen“.

Gehen Sie dazu wieder links zur „Serversteuerung“ und rechts zur entsprechenden Registerkarte „Dienst starten/stoppen“ und starten Sie den Dienst per Klick. Ab diesem Zeitpunkt benötigen Sie für die Verbindung mit MySQL keinen Benutzernamen und kein Kennwort mehr und können das Root-Kennwort ändern.

3.1.2 Installationsservice

Zuerst geben wir das Bin-Verzeichnis unter dem MySQL-Installationsverzeichnis ein, öffnen dann das DOS-Befehlsfenster und geben das Verzeichnis ein (geben Sie unbedingt das Verzeichnis ein, da der Vorgang sonst fehlschlägt).

DOS-Befehl ausführen:

Geben Sie den Befehl mysqld --install ein. Die folgende Schnittstelle wird angezeigt. Der Dienst wurde erfolgreich installiert.

Beachten Sie, dass es mysqld --install heißt und nicht mysql --install

Wenn Sie den Dienst deinstallieren möchten, können Sie den folgenden Befehl eingeben: mysqld --remove. Die folgende Schnittstelle wird angezeigt. Die Meldung besagt, dass der Dienst erfolgreich entfernt wurde.

3.2. Verwenden Sie die Installationsversion

MySQL5.5.27_64-Bit-Installationspaket-Download-Adresse 1: https://pan.baidu.com/s/1minwz1m Passwort: ispn

MySQL5.5.56_64-Bit-Installationspaket-Download-Adresse 2: https://www.jb51.net/softs/363920.html

Downloadadresse der offiziellen Website des MySQL5.7.17-Installationspakets: https://dev.mysql.com/downloads/windows/installer/

Wählen Sie „Benutzerdefiniert“:

Informationen zu den installierten Komponenten:

Server-Softwareverzeichnis:

Datenverzeichnis:

Klicken Sie zum Installieren auf „Installieren“:


Konfiguration:

Maschinentyp


Ob die Transaktionsfunktion unterstützt wird:

InnoDB-Tabellenbereich:


Anzahl Verbindungen:


Zeichensatzeinstellungen:


Konfigurieren Sie die Windows-Verwaltung im Zusammenhang mit:


Konfigurieren Sie die Sicherheitsoptionen und legen Sie den Benutzernamen und das Kennwort des Administrators fest:


Führen Sie abschließend die Konfiguration aus:


Nach der Konfiguration wird der Dienst gestartet.

Das MySQL-Installationspaket der neuen Version ist viel größer und auch der Installationsprozess ist etwas anders.

4. Verwenden Sie die GUI, um MySQL zu bedienen

4.1 Typische Konzepte relationaler Datenbanken

Datenbank: Data Warehouse

Tabelle: Daten werden in einer Tabelle gespeichert. In einer Tabelle gespeicherte Daten sollten dasselbe Datenformat haben.

Zeile: Die Zeile wird zum Aufzeichnen von Daten verwendet

Datensatz: Daten innerhalb einer Zeile

Spalte: Spalten werden verwendet, um das Datenformat anzugeben

Feld: eine Datenspalte

SQL: Eine Sprache zur Verwaltung von Daten. Strukturierte Abfragesprache (SQL)

Primärschlüssel: Identifiziert einen Datensatz in der Tabelle eindeutig und darf nicht leer oder wiederholt sein.

4.2. Melden Sie sich bei der Datenbank an

*Der Dienst muss beim Verbinden mit der lokalen Datenbank gestartet werden

4.3. Erstellen Sie eine Datenbank

4.4. Erstellen Sie eine Tabelle

Spaltentyp:

Nummerntypen

Ganze Zahlen: tinyint, smallint, mediumint, int, bigint
Gleitkommazahlen: Float, Double, Real, Dezimal
Datum und Uhrzeit: Datum, Uhrzeit, Datum/Uhrzeit, Zeitstempel, Jahr

Zeichenfolgentyp Zeichenfolge: char, varchar
Text: Kleintext, Text, Mitteltext, Langtext

Binär (kann zum Speichern von Bildern, Musik usw. verwendet werden): tinyblob, blob, mediumblob, longblob

Spaltenbeschränkungen:

4.5. Daten verwalten

4.5.1. Daten hinzufügen

Doppelklicken Sie auf den neu erstellten Tabellennamen, um die Tabelle zu öffnen und Daten hinzuzufügen.

4.5.2. Löschen von Daten

4.5.3. Tabellenstruktur ändern

Wenn Sie einer vorhandenen Tabelle eine Spalte hinzufügen möchten, können Sie die Tabellenstruktur ändern:

4.5.4 Fremdschlüssel

Es gibt einige Probleme mit der obigen Studententabelle:

a) Es ist nicht einfach, Änderungen vorzunehmen. Wenn beispielsweise der Klassenraum in Klassenraum 305 geändert wird, muss jeder Schüler die

b) Datenredundanz, große Mengen doppelter Daten

Teilen Sie die Tabelle in zwei Teile und lösen Sie das Problem, wie in der folgenden Abbildung gezeigt:

Die Klassennummer ist hier der Fremdschlüssel, der leer sein kann, aber wenn er nicht leer ist, muss sein Wert in der referenzierten Tabelle vorhanden sein. Wenn die Nummer in der Studententabelle der Primärschlüssel ist, sollte sie hier nicht wiederholt werden, der Fremdschlüssel kann jedoch wiederholt werden und leer sein.

Fügen Sie einen Fremdschlüssel hinzu:

Stundenplan:

Schülertabelle:

Fügen Sie einen Fremdschlüssel hinzu:

Beim Löschen und Aktualisieren können kaskadierende Aktualisierungen und Löschungen erreicht werden. Wenn die Aktualisierung auf CASCADE eingestellt ist, ändert sich der Primärschlüssel und die Tabelle, die auf den Primärschlüssel verweist, ändert sich ebenfalls. Wenn die Löschung auf CASCADE eingestellt ist, wird die Primärschlüsseltabelle gelöscht und die referenzierten Datensätze werden gelöscht.

4.5.5 Eindeutiger Schlüssel

Ein eindeutiger Schlüssel, auch Unique Constraint genannt, unterscheidet sich von einem Primärschlüssel darin, dass es mehrere eindeutige Schlüssel geben kann und der Wert NULL sein kann, NULL jedoch nicht wiederholt werden kann, was bedeutet, dass nur eine Zeile einen NULL-Wert haben kann. Es wird implizit ein eindeutiger Index erstellt.

Einstellungsmethode: Index -> Index hinzufügen -> Fügen Sie die Spalte hinzu, für die Sie eine eindeutige Einschränkung festlegen möchten, im Feldnamen -> Wählen Sie „Eindeutig“ als Indextyp aus.

#Abfrage: ID und Name aus Yuangong auswählen

wähle * aus Yuangong

Wählen Sie * aus Yuangong, wo Gehalt> 5000

#Fügen Sie INSERT in yuangong(name,salary,bumenId,mobile) value('Anmelden',2190.6,2,19889007867) hinzu;

INSERT in yuangong(Name, Gehalt, BumenId, Handy) Wert('Name des Gehalts', 9871,6,1,19889007777);


#Ändern Sie das Update von Yuangong und legen Sie Gehalt = Gehalt +1 fest, wobei ID = 7 ist.

#deleteINSERT in yuangong(Name, Gehalt, BumenId, Handy) Wert('Name des Empfängers', 9871,6,1,19889007777);

löschen aus Yuangong mit ID=8

4.6. Computerpraxis

1. Bitte erstellen Sie eine neue Datenbank mit dem Namen HR und fügen Sie die EMP-Tabelle in die HR-Datenbank ein. Die Tabellenstruktur der EMP-Tabelle ist wie folgt

EMP-Formular: Mitarbeiterinformationen

Nr.

Name

Typ

beschreiben

1

EMPNO

int

Mitarbeiter-ID, Primärschlüssel, Auto-Inkrement

2

ENAME

VARCHAR(10)

Name des Mitarbeiters, bestehend aus 10 Zeichen, nicht leer, eindeutiger Schlüssel

3

ARBEIT

VARCHAR(9)

Position des Mitarbeiters

4

MGR

int

Die dem Mitarbeiter entsprechende Leiternummer. Der Leiter ist auch ein Mitarbeiter. Sie kann leer sein (diese Spalte kann gelöscht werden).

5

EINSTELLUNGSDATUM

Zeitstempel

Das Einstellungsdatum des Mitarbeiters ist standardmäßig das aktuelle Datum.

6

SAL

Numerisch(7,2)

Grundgehalt, darunter zwei Dezimalstellen und fünf Ganzzahlen, insgesamt sieben Ziffern

7

KOMM

Numerisch(7,2)

Bonus, Provision

8

ABTEILUNG NR

int

Die Abteilungsnummer des Mitarbeiters, optional, Fremdschlüssel fk_deptno

9

DETAIL

Text

Notizen, optional

Dept: Abteilungstabelle

Nr.

Name

Typ

beschreiben

1

AbteilungNr

int

Abteilungsnummer, Primärschlüssel, Auto-Inkrement

2

DNS-Name

VARCHAR(10)

Abteilungsname, bestehend aus 50 Zeichen, nicht leer, eindeutiger Schlüssel

3

DTel

VARCHAR(10)

Telefon, verfügbar

2. Schließen Sie die Erstellung der Tabelle gemäß der obigen Tabellenstruktur ab. Der Tabellenname lautet emp

3. Fügen Sie der Tabelle mehr als 5 Daten hinzu

4. Erfüllen Sie die folgenden Abfrageanforderungen

4.1 Abfrage aller Mitarbeiterinformationen

4.2 Abfrage des Namens, der Position und des Gehalts aller Mitarbeiter, deren Gehalt zwischen 2000 und 5000 liegt

4.3 Alle Mitarbeiter mit dem Nachnamen „Zhang“ abfragen

4.4 Abfrage von Mitarbeitern, die zwischen 2014 und 2015 eingetreten sind, in absteigender Reihenfolge des Gehalts

4.5. Lohnerhöhung um 20 %

4.6. Erhöhung des Bonus für Mitarbeiter mit einem Gehalt unter 3.000 RMB auf das 2,8-fache ihres Gehalts

4.7. Löschen Sie den Mitarbeiter mit der ID 5 oder dem Nachnamen „Wang“

5. Zugriff auf die MySQL-Datenbank mit SQL

5.0, definieren Sie die Studententabelle Stu

(Ausweisnummer, Name, Geschlecht, Alter, …)

5.0.1. Eine neue Datenbank erstellen

5.0.2, Erstellen einer neuen Tabelle

5.0.3. Eine neue Abfrage erstellen

5.1. Daten hinzufügen

Mit der Insert-Anweisung können Sie eine oder mehrere Datenzeilen in eine Datenbanktabelle einfügen. Die verwendete allgemeine Form ist wie folgt:

In den Tabellennamen (Feldliste) Werte (Werteliste) einfügen;

füge [in] Tabellenname [(Spaltenname 1, Spaltenname 2, Spaltenname 3, ...)] Werte (Wert 1, Wert 2, Wert 3, ...) ein;

in Studentenwerte einfügen (NULL, "null", "null", 20, "18889009876");

Manchmal müssen wir nur einen Teil der Daten einfügen oder sie außerhalb der Spaltenreihenfolge einfügen. Zum Einfügen können wir dieses Formular verwenden:

in Studenten einfügen (Name, Geschlecht, Alter) Werte("李四", "女", 21);

#1. Daten hinzufügen, einfügen in stu(name,sex,age) values('Jacky Cheung','Männlich',18);
in stu(Name, Geschlecht, Alter) einfügen Werte('Name des Geschlechts','Alter',73);
in stu(Name, Geschlecht, Alter) einfügen Werte('Name des Kindes', 'Geschlecht', 23);
in stu(Name, Geschlecht, Alter) einfügen: Werte('Name', 'Geschlecht', 85);
in stu(Name, Geschlecht, Alter) einfügen Werte('Name','Geschlecht',35);

5.2 Daten abfragen

Die Select-Anweisung wird häufig verwendet, um Daten aus der Datenbank nach bestimmten Abfrageregeln abzurufen. Ihre grundlegende Verwendung ist:

Wähle den Feldnamen aus dem Tabellennamen [Abfragebedingung];

Alle Informationen in der Studententabelle abfragen: select * from students;

Abfrage aller Namens- und Altersinformationen in der Schülertabelle: Auswahl von Namen und Alter der Schüler;

Alternativ können Sie mit dem Platzhalter * auch den gesamten Inhalt der Tabelle abfragen, Anweisung: select * from students;

#1. Daten hinzufügen, einfügen in stu(name,sex,age) values('Jacky Cheung','Männlich',18);
in stu(Name, Geschlecht, Alter) einfügen Werte('Name des Geschlechts','Alter',73);
in stu(Name, Geschlecht, Alter) einfügen Werte('Name des Kindes', 'Geschlecht', 23);
in stu(Name, Geschlecht, Alter) einfügen: Werte('Name', 'Geschlecht', 85);
in stu(Name, Geschlecht, Alter) einfügen Werte('Name','Geschlecht',35);

in stu(Name, Geschlecht, Alter) einfügen Werte('Name des Geschlechts', 'Alter', 99);

#2. Daten abfragen #2.1. Alle Studenten abfragen. ID, Name, Geschlecht und Alter des Studenten auswählen.

#2.2. Abfrage für Studentinnen über 80 Jahre. Wählen Sie ID, Name, Geschlecht und Alter aus der Kategorie Studentin aus, wobei Alter > 80 und Geschlecht = „weiblich“ ist.

Ergebnis:

5.2.1. Ausdruck und bedingte Abfrage

Mit dem Schlüsselwort where wird die Abfragebedingung angegeben. Die Verwendungsform lautet: select column name from table name where condition;

Um beispielsweise alle Informationen zum weiblichen Geschlecht abzufragen, geben Sie die Abfrageanweisung ein: select * from students where sex="female";

Die Where-Klausel unterstützt nicht nur die Abfrageform „where column name = value“, bei der der Name gleich dem Wert ist, sondern auch allgemeine Vergleichsoperatoren wie =, >, <, >=, <, != und einige erweiterte Operatoren wie is [not] null, in, like usw. Sie können die Abfragebedingungen auch mit oder und und kombinieren. Später werden Sie fortgeschrittenere Methoden für bedingte Abfragen kennenlernen, daher werde ich sie hier nicht vorstellen.

Beispiel:

Abfrage aller Informationen von Personen über 21 Jahren: Wählen Sie * aus Studenten mit Alter > 21;

Abfrage aller Informationen von Personen, deren Namen „王“ enthalten: select * from students where name like „%王%“;

Abfrage aller Informationen von Personen, deren ID kleiner als 5 und deren Alter größer als 20 ist: select * from students where id<5 and age>20;

5.2.2 Aggregationsfunktionen

Ermitteln Sie die Gesamtzahl der Studierenden: select count(*) from students

Holen Sie sich die durchschnittliche Punktzahl der Schüler: select avg(mark) from students

Holen Sie sich die höchste Punktzahl: wählen Sie max(Marke) aus den Studenten

Holen Sie sich die niedrigste Punktzahl: wählen Sie min(mark) aus den Studenten

Holen Sie sich die Gesamtpunktzahl der Schüler: select sum(mark) from students

5.3. Löschung von Daten

aus Tabellenname löschen [Löschbedingung];

Löschen Sie alle Daten in der Tabelle: Löschen von Schülern;

Löschen Sie die Zeile mit ID 10: Löschen Sie von Schülern, wobei ID = 10;

Alle Daten jünger als 88 Jahre löschen: Löschen von Schülern, bei denen Alter <88;

#1.

In stu (Name, Sex, Alter) Werte einfügen ('Jacky Cheung', 'männlich', 18);
In stu (Name, Geschlecht, Alter) Werte ('张娜拉', '女', 73) einfügen;
In stu (Name, Geschlecht, Alter) Werte ('张家辉', '男', 23) einfügen;
In stu (Name, Geschlecht, Alter) Werte ('张慧美', '女', 85) einfügen;
In stu (Name, Geschlecht, Alter) Werte ('张铁林', '男', 35) einfügen;
In stu (Name, Geschlecht, Alter) Werte ('张国立', '男', 99) einfügen;

#2.

#2.1 、 Fragen Sie alle Schüler ab, die ID, Name, Sex, Alter von Stu auswählen;

#2.2 、 Abfragen von Studentinnen älter als 80 Jahre alte Auswahl, Name, Geschlecht, Alter aus Stu, wo Alter> 80 und Sex = 'weiblich';

#2.3 、 Abfragen Sie das Durchschnittsalter aus, um AVG (Alter) aus STU zu wählen, wobei Sex = '女';

#3.
#3.1 、 Erhöhen Sie das Alter der Schüler -ID 1 nach 1 Aktualisierung Stu Set Alter = Alter+1 wobei ID = 1;

#3.2. Ändern Sie das Alter von Studentinnen über 80 bis 90 und fügen Sie "alter Mann" nach ihren Namen hinzu
#Concat (str1, str2, ...) concattenate string update stu set ay = 90, name = concat (name, '(alter Mann)') wobei Alter> = 80 und sex = 'weiblich';

#3.3 、 Ändern Sie den Namen des Schülers Nr. 4 in Zhang Huimei Update Stu SET NAME = 'Zhang Huimei' wobei ID = 4;

#4.
#4.1 、 Schülern löschen älter als 70 Jahre alt von Stu, wo Alter> 70;

#4.2, löschen Sie alle Schüler aus Stu;

5.4

Die Aktualisierungsanweisung kann verwendet werden, um die Daten in der Tabelle zu ändern.

Tabellenname Set Spaltenname = neuer Wert, wobei Aktualisierungsbedingung;

Aktualisieren Sie die Tabelle Name Set Feld = Wertliste Aktualisierung Bedingung

Beispiel Verwendung:

Ändern Sie die Mobiltelefonnummer von ID 5 in die Standardeinstellung "-": Aktualisieren Sie die Schüler setzen tel = Standard, wobei ID = 5;

Erhöhen Sie das Alter aller um 1: Aktualisieren Sie die Schüler setzen das Alter = Alter+1;

Ändern Sie den Namen des Schülers mit der Mobiltelefonnummer 13723887766 in "Zhang Guo" und das Alter 19: Aktualisieren Sie die Schüler setzen den Namen = "Zhang Guo", Alter = 19 wobei Tel = "13723887766";

5.5

Die Anweisung für die Änderung der Tabelle wird verwendet, um eine Tabelle zu ändern, nachdem sie erstellt wurde.

5.5.1

Grundformular: Änderungstabelle Tabelle Name Fügen Sie Spaltenname Spaltendatentyp [nach Einfügenposition];

Beispiel:

Fügen Sie die Adressspalte zum Ende der Tabelle hinzu: Änderung der Tabelle Schüler Fügen Sie Adresschar (60) hinzu;

Fügen Sie die Geburtstagsspalte nach der Altersspalte ein: Änderung der Tabelle Schüler Fügen Sie das Geburtstagsdatum nach dem Alter hinzu;

5.5.2.

Beispiel:

Benennen Sie die TEL-Spalte in der Tabelle in Telefon um.

Ändern Sie den Datentyp der Namensspalte in char (9): Änderung der Tabelle Studenten ändern Name Name char (9), nicht null;

5.5.3, Spalte Löschen Basic Formular: Alter Tabelle Tabelle Name Drop -Spaltenname;

Beispiel:

Löschen Sie die Altersspalte: TABLE TABLE STUDIEREN SPRECHEN ALTER;

5.5.4, Tabelle Basisform umbenennen: Änderung der Tabelle Tabelle Name neu um den neuen Tabellennamen umbenennen;

Beispiel:

Benennen Sie die Tisch der Schüler in Temp: Änderung der Tabelle die Schüler umbenennen Temp;

5.5.5, grundlegende Form des Löschens einer Tabelle: Drop -Tabellen -Name;

Beispiel: Löschen Sie die Schülertabelle: Droptabelle Schüler;

5.5.6.

Beispiel: Löschen Sie die LCOA -Datenbank: Drop -Datenbank LCOA;

5.5.7.

/ * Starten mysql */
net start mysql

/* Verbinden und trennen Sie ihn vom Server*/
MySQL -H Adress-P port-u Benutzername-P-Passwort/ * Überprüfung der Berechtigung überspringen und melden Sie sich bei MySQL */an
mysqld --skip-grant-tables
- Ändern Sie das Kennwort für die Verschlüsselungskennwort für das Stammkennwortkennwort () ()
Aktualisieren Sie MySQL.User set password = password ('root');

ProcessList anzeigen -zeigt an, welche Threads derzeit Showvariablen ausführen - 

/ * Datenbankoperationen */ ----------------------
- Zeigen Sie die aktuelle Datenbank anzeigen auswählen Datenbank ();
- Zeigen Sie die aktuelle Zeit-, Benutzername und Datenbankversion an. Wählen Sie jetzt (), user (), Version () aus;
- Datenbank erstellen Datenbank erstellen [falls dies nicht existiert] Datenbank Name Datenbankoptionen Datenbankoptionen:
 Zeichensatz charset_name
 COLLATE COLLATION_NAME
- Vorhandene Bibliotheken anzeigen Datenbanken [wie 'Muster']
-Zeigen Sie die aktuellen Datenbankinformationen anzeigen Zeigen Sie Datenbankdatenbankname an. Erstellen Sie die Optionsinformationen der Option zur Option zur Datenbank-Änderung der Datenbank-Bibliotheksname.
- Tabelle erstellen [temporäre] Tabelle [wenn nicht existiert] [Datenbankname.] Tabellenname (Tabellenstrukturdefinition) [Tabellenoptionen]
 Jedes Feld muss nach dem letzten Feld ein Komma vorhanden sein.
 Feldname -Datentyp [nicht null |
- Tabellenoptionen- Zeichensatz charset = charset_name
 Wenn die Tabelle nicht eingestellt ist 
 Tabellen verwenden verschiedene Datenstrukturen beim Verwalten von Daten.
 Verschiedene Motoren verwenden verschiedene Methoden, um die Tabellen -Definition, MyISAM -Datei zu speichern,.
 - Indexdatei-Verzeichnis index Directory = 'Verzeichnis'
 - Tabelle Kommentar Kommentar = 'String'
 - Partition Option Partition von ... (siehe Handbuch für Details)
- Alle Tabellen anzeigen Tische anzeigen [wie 'Muster']
 Tabellen aus Tabellenname anzeigen - Zeigen Sie die Tabellenstruktur an. Zeigen Sie den Tabellennamen Tabelle erstellen (detailliertere Informationen).
 DESC -Tabellenname/ Beschreibung Tabellenname/ Erklärung Tabellenname/ Spalten aus dem Tabellennamen [wie 'Muster']
 Tabellenstatus anzeigen [aus db_name] [wie 'Muster']
- Ändern Sie die Tabelle- Ändern Sie die Optionen der Tabelle selbst Alter Tabelle Tabelle Name Tabelle Optionen, z.
 - Benennen Sie die Tabelle umbenennen Tabelle Original-Tabellenname in neuer Tabellenname Umbenennen Sie die Tabellenname in den Datenbanknamen. Table Name (die Tabelle kann in eine andere Datenbank verschoben werden)
 - Umbenennen kann zwei Tabellennamen tauschen- Ändern Sie die Feldstruktur der Tabelle Änderung Tabelle Tabelle Name Vorstellungsname- Betriebsname hinzufügen [Spalte] Feldname- Fügen Sie ein Feld nach Feldname hinzu- Zeigt das Hinzufügen nach dem Feldname zuerst an- Zeigt zum ersten Mal hin hinzufügen Primärschlüssel hinzufügen (Feldname)- Erstellen Sie einen Primärschlüssel hinzufügen [Index-Name hinzufügen] (Feldname erstellen)- eindeutiger Index hinzufügen. 
 DROP [Spalte] Feldname - Löschen Sie das Feld "Feld" Feldname Feldname -Attribute - Unterstützen Sie die Änderung der Feldattribute, jedoch nicht den Feldnamen (alle ursprünglichen Attribute müssen ebenfalls geschrieben werden)
 Ändern Sie [Spalte] Originalfeldname Neue Feldname -Attribute für Feldnamen - Unterstützung für die Änderung der Feldnamen Drop Primärschlüssel - Löschen Sie die Primärschlüssel (Vor dem Löschen der Primärschlüssel müssen Sie das Attribut auto_increment löschen)
 DROP -INDEX -Indexname - Löschen von Index Drop Fremdschlüssel Fremdtaste löschen - Fremdschlüssel löschen - Tabelle Tabelle löschen [falls existiert] Tabellenname ...
- Tabellendaten löschen [Tabelle] Tabellenname- Die Tabelle Struktur erstellen Tabelle Erstellen Sie Tabellenname.
- optimieren Sie die Tabelle optimieren [Lokal |
- Reparaturtabelle Reparatur [Lokal |
- Analysieren [Lokal |



/ * Datenoperation */ ----------------------
- Fügen Sie in den Tabellennamen [(Feldliste)] Werte (Wertliste) [, (Wertliste), ...] hinzu.
 - Wenn die zugefügte Liste der Werte alle Felder enthält und in derselben Reihenfolge ist, kann die Feldliste weggelassen werden.
 - Mehrere Datensätze können gleichzeitig eingefügt werden!
 Ersetzen ist genau das gleiche wie ein Insert und austauschbar.
 Einfügen [in] Tabellenname festlegen Feldname = value [, Feldname = Wert, ...]
- Überprüfen Sie die Feldliste aus dem Tabellennamen [andere Klauseln]
 - Mehrere Felder aus mehreren Tabellen- Andere Klauseln können weggelassen werden- die Feldliste kann durch * ersetzt werden, um alle Felder anzugeben.
 Wenn es keine bedingte Klausel gibt, werden alle gelöscht-Choch-Update-Tabellenname Set Feldname = neuer Wert [, Feldname = neuer Wert] [Update-Bedingung]

/ * Zeichensatz Codierung */ ----------------------
- MySQL, Datenbank, Tabelle und Feld können alle Codierungen festlegen- Datencodierung müssen nicht mit der Client-Codierung konsistent sein _client = gbk;
 setze Zeichensatzergebnisse = gbk;
 Setzen Sie Zeichen_Set_Connection = gbk;
Setzen Sie Namen GBK;
1. Numerischer Typ-a.
 Geben Sie Byte -Bereich ein (Zeichenbit)
 Tinyint 1 Byte -128 ~ 127 Unsigned Bits: 0 ~ 255
 Smallint 2 Bytes -32768 ~ 32767
 Mediumint 3 Bytes -8388608 ~ 8388607
 int 4 bytes bigint 8 bytes int (m) m zeigt die Gesamtzahl der Bits an - standardmäßig gibt es ein Zeichenbit, vorzeichenloses Attributänderung - Anzeigebreite, wenn eine Zahl für die Anzahl der Bits nicht ausreicht, wenn das Feld definiert wird, ist es mit 0 vorne mit 0 gepolstert.
 - Je kleiner, desto besser, vorausgesetzt, die Anforderungen werden erfüllt.
 - 1 repräsentiert einen BOOL -Wert von True, 0 repräsentiert einen BOOL -Wert von False. MySQL hat keinen booleschen Typ und wird durch Ganzzahlen 0 und 1 dargestellt. Tinyint (1) wird häufig zur Darstellung von Booleschen Typen verwendet.

-b.
 Typ Byte -Bereich Float (Einzelgenauigkeit) 4 Bytes Doppelte (doppelte Präzision) 8 Bytes Floating Point Typ unterstützt sowohl das nicht signierte Attribut des Vorzeichenbits als auch das ZeroFill -Attribut der Anzeigebreite.
 Im Gegensatz zu Ganzzahlen sind die 0s vor und hinten gefüllt.
 Wenn Sie einen schwimmenden Punkttyp definieren, müssen Sie die Gesamtzahl der Ziffern und die Anzahl der Dezimalstellen angeben.
 float (m, d) doppelt (m, d)
 M repräsentiert die Gesamtzahl der Ziffern, und D repräsentiert die Anzahl der Dezimalstellen.
 Die Größe von m und d bestimmt den Bereich der schwimmenden Punktzahlen. Anders als der feste Bereich der Ganzzahltypen.
 M repräsentiert sowohl die Gesamtzahl der Ziffern (ohne den Dezimalpunkt als auch die positiven und negativen Vorzeichen) als auch die Anzeigebreite (einschließlich aller angezeigten Symbole).
 Unterstützt wissenschaftliche Notation.
 Die schwimmenden Punktzahlen repräsentieren ungefähre Werte.

-c.
 Dezimales - Dezimaler variabler Länge (M, D) M repräsentiert auch die Gesamtzahl der Ziffern und D repräsentiert die Anzahl der Dezimalstellen.
 Speichert einen genauen Wert, ohne die Daten zu ändern, im Gegensatz zur Abrundung der schwimmenden Punktzahlen.
 Konvertieren Sie die schwimmende Punktzahl in eine Zeichenfolge, um sie zu speichern, wobei jede 9 Ziffern als 4 Bytes gespeichert ist.

2. String-Typ-a.
 char ist eine schnelle Zeichenfolge mit fester Länge, aber der Speicherplatz.
 Verschiedene Codes belegen unterschiedliche Räume.
 Char, bis zu 255 Zeichen, unabhängig von der Codierung.
 Varchar, je nach Codierung bis zu 65535 Zeichen.
 Die maximale Länge eines gültigen Datensatzes darf 65535 Bytes nicht überschreiten.
 Die maximale Länge von UTF8 beträgt 21844 Zeichen, die maximale Länge von GBK beträgt 32766 Zeichen, und die maximale Länge von Latein1 beträgt 65532 Zeichen.
 Die maximale effektive Länge von Varchar wird durch die maximale Zeilengröße und den verwendeten Zeichensatz bestimmt.
 Die maximal gültige Länge beträgt 65532 Bytes, denn wenn ein Varchar eine Zeichenfolge speichert, ist das erste Byte leer und enthält keine Daten, und dann sind zwei Bytes erforderlich, um die Länge der Zeichenfolge zu speichern, sodass die effektive Länge 64432-1-2 = 65532 Bytes beträgt.
 Zum Beispiel: Wenn eine Tabelle als Tabelle TB (C1 Int, C2 char (30), C3 varchar (n)) charset = utf8 definiert ist? Antwort: (65535-1-2-4-30*3)/3

-b.
 BLOB BINARY String (Byte String)
 Tinyblob, Blob, Mediumblob, Longblob
 Text Nicht-binärer Zeichenfolge (Zeichenzeichenfolge)
 TinyText, Text, MediumText, Longtext
 Bei der Definition von Text müssen die Länge nicht definiert werden, und die Gesamtlänge wird nicht berechnet.
 Wenn Sie einen Texttyp definieren, können Sie ihm keinen Standardwert geben-c.
 Ähnlich wie bei Char und Varchar wird es verwendet, um binäre Strings zu speichern, dh Byte -Saiten anstelle von Zeichenketten.
 char, varchar, text entspricht binär, varbarinary, Blob.

3. Der Datums- und Uhrzeityp verwendet im Allgemeinen Ganzzahl, um Zeitstempel zu sparen, da PHP einfach Zeitstempel formatieren kann.
 DateTime 8-Byte Datum und Uhrzeit 1000-01-01 00:00:00 bis 9999-12-31 23:59:59
 Datum 3-Byte Datum 1000-01-01 bis 9999-12-31
 TIMESTAMP 4 BYTES TIMESTAMP 19700101000000 bis 2038-01-19 03:14:07
 Zeit 3 ​​Bytes Zeit -838: 59: 59 bis 838: 59: 59
 Jahr 1 Byte Jahr 1901 - 2155
 
datetime "yyyy-mm-dd hh: mm: ss"
TIMESTAMP "YY-MM-DD HH: MM: SS"
 "Yyyymmddhhmms" "
 "Yymmddhhmms" "
 Yyyymmddhhmms
 Yymmddhhmms
Datum "yyyy-mm-dd"
 "YY-MM-DD"
 "Jyyymmdd"
 "Yymmdd"
 Yjyymmdd
 Yymmdd
Zeit "HH: MM: SS"
 "HHMMSS"
 HHMMSS
Jahr "Yyyy"
 "Yy"
 JJJJ
 JJ

4. Aufzählung und Sammlung-Aufzählung (Enum) ----------
Enum (Val1, Val2, Val3 ...)
 Wählen Sie einen einzelnen Wert aus den bekannten Werten aus. Die maximale Zahl beträgt 65535.
 Wenn der Aufzählungswert gespeichert wird, wird er als 2-Byte-Ganzzahl (Smallint) gespeichert. Jeder Aufzählungswert wird nach einem nach 1 in der Reihenfolge der gespeicherten Position nacheinander inkrementiert.
 Es wird als String -Typ dargestellt, wird jedoch als Ganzzahltyp gespeichert.
 Der Index eines Nullwerts ist null.
 Der Indexwert des leeren String -Fehlerwerts beträgt 0.

-- Satz ----------
Set (Val1, Val2, Val3 ...)
 Tabelle Registerkarte erstellen (Geschlechtssatz ('男', '女', 'None'));
 in tab -Werte einfügen ('男, 女');
 Es kann bis zu 64 verschiedene Mitglieder geben. Insgesamt 8 Bytes aufbewahrt. Nimmt die Form von bitgewiehenen Operationen an.
 Beim Erstellen einer Tabelle werden automatisch nach Ablaufräumen in festgelegten Mitgliedswerten entfernt.

/*Wählen Sie Typ*/
-PHP-Perspektive 1. Die Funktionalität ist erfüllt. 2. Der Speicherplatz ist so gering wie möglich, die Verarbeitungseffizienz ist höher.
1. Wenn Sie nur Daten speichern müssen, können Sie eine Zeichenfolge verwenden.
 1) Die PHP-Funktion IP2long kann in eine Ganzzahl konvertiert werden, aber es wird ein Problem mit dem Zeichentransport geben. Müssen als unsignierte ganze Zahl formatiert werden.
 Verwenden Sie die Sprintf -Funktion, um den String Sprintf ("%u", IP2long ('192.168.3.134') zu formatieren;
 Verwenden Sie dann Long2IP, um die Ganzzahl in eine IP -Zeichenfolge zu konvertieren.
 INET_ATON ('127.0.0.1') IP in Ganzzahl inet_ntoa (2130706433) Konvertieren Sie Ganzzahl in IP.
 



/ * Spaltenattribute (Spaltenbeschränkungen) */ --------------------------
1. Primärschlüssel - Ein Feld, das einen Datensatz eindeutig identifizieren kann, kann als Primärschlüssel verwendet werden.
 - Eine Tabelle kann nur einen Primärschlüssel haben.
 - Der Hauptschlüssel ist einzigartig.
 - Wenn Sie ein Feld deklarieren, verwenden Sie den Primärschlüssel, um es zu identifizieren.
 Es kann auch nach der Feldliste deklariert werden, z. B. der Tabelle Tabelle (ID int, stu varchar (10), Primärschlüssel (ID));
 - Der Wert des Primärschlüsselfeldes kann nicht null sein.
 - Ein Primärschlüssel kann aus mehreren Feldern bestehen. In diesem Fall muss die Methode nach der Feldliste deklariert werden.
 Beispiel: Registerkarte "Tabelle erstellen" (ID int, stu varchar (10), Alter int, Primärschlüssel (Stu, Alter));

2. Eindeutiger Index (eindeutige Einschränkung)
 Dies verhindert, dass der Wert eines Feldes wiederholt wird.
 
3.. Null Constraint Null ist kein Datentyp, sondern ein Attribut einer Spalte.
 Gibt an, ob die aktuelle Spalte null sein kann, was nichts anzeigt.
 Null, leer ist erlaubt. Standard.
 nicht null, nicht leer sein.
 In Tab -Werte einfügen (null, 'val');
 - Dies bedeutet
 
4. Standardmäßig Das Standardwertattribut ist der Standardwert des aktuellen Feldes.
 In die Registerkartenwerte einfügen (Standard, 'Val') - dies bedeutet, dass der Standardwert verwendet wird.
 Tabelle Registerkarte erstellen (add_time timestamp Standard Current_Timestamp);
 - bedeutet, den aktuellen Zeitstempel als Standardwert festzulegen.
 current_date, current_time

5. Auto_Increment Automatische Wachstumsbeschränkung Automatisches Wachstum muss ein Index sein (Primärschlüssel oder eindeutig)
 Nur ein Feld kann automatisch inkrementiert werden.
 Der Standardwert beträgt 1, um das automatische Wachstum zu beginnen. Sie können es mit dem Tabellenattribut auto_increment = x oder mithilfe der Änderung Tabelle TBL auto_increment = x einstellen;

6. Kommentar Beispiel: Tabelle Registerkarte erstellen (ID int) Kommentar 'Kommentarinhalt';

7. Fremdschlüsselbeschränkungen werden verwendet, um die Datenintegrität der Primärtabelle und die sekundäre Tabelle zu begrenzen.
 Änderungstabelle T1 Hinzufügen von Einschränkungen `t1_t2_fk` fremdschlüssel (t1_id) referenzen t2 (id);
 - Verbinden Sie den T1_ID-Fremdschlüssel von Tabelle T1 dem ID-Feld von Tabelle T2.
 - Jeder fremde Schlüssel hat einen Namen.

 Funktion: Verwalten Sie die Datenkonsistenz und Integrität.

 In MySQL können Sie fremde Schlüsselbeschränkungen mit dem InnoDB -Motor verwenden:
 Grammatik:
 Fremdschlüssel (Fremdschlüsselfeld) Referenzen Hauptname der Tabelle (verwandtes Feld) [Aktion Wenn der Haupttabellendatensatz gelöscht wird] [Aktion Wenn der Haupttabellensatz aktualisiert wird]
 Zu diesem Zeitpunkt muss festgestellt werden, dass ein Fremdschlüssel einer Sekundärtabelle auf einen vorhandenen Wert der Primärtabelle beschränkt werden muss. Ein Fremdschlüssel kann auf Null gesetzt werden, wenn es keine Assoziation gibt, vorausgesetzt, die Spalte für die ausländische Schlüsselspalte hat nicht NULL.

 Sie müssen die Aktion nicht angeben, wenn der Master -Tabellendatensatz geändert oder aktualisiert wird. In diesem Fall wird der Vorgang auf der Master -Tabelle abgelehnt.
 Wenn das Update oder beim Löschen angegeben ist: Beim Löschen oder Aktualisieren können Sie aus den folgenden Vorgängen auswählen:
 1. Kaskade, Kaskadenbetrieb. Die Master -Tabellendaten werden aktualisiert (der Primärschlüsselwert wird aktualisiert) und die Slave -Tabelle wird auch aktualisiert (Fremdschlüsselwert wird aktualisiert). Der Master -Tabellendatensatz wird gelöscht und die zugehörigen Datensätze in der Sklaventabelle werden ebenfalls gelöscht.
 2. Setzen Sie NULL, auf Null gesetzt. Die primären Tabellendaten werden aktualisiert (der Primärschlüsselwert wird aktualisiert) und der Fremdschlüssel der Sekundärtabelle wird auf null gesetzt. Der Master -Tabellensatz wird gelöscht und der Fremdschlüssel des zugehörigen Datensatzes in der Slave -Tabelle wird auf Null gesetzt. Beachten Sie jedoch, dass die Spalte für Fremdschlüssel keine Null -Attributbeschränkung haben muss.
 3.. Beschränken Sie die Löschung und Aktualisierung der übergeordneten Tabelle.

 Beachten Sie, dass ausländische Schlüssel nur vom InnoDB Storage Engine unterstützt werden. Andere Motoren werden nicht unterstützt.


/* Tabellenerstellungsspezifikationen*/ ----------------------
 - Normales Format, NF
 - Jede Tabelle speichert Informationen zu einer Entität - Jede Tabelle hat ein ID -Feld als Primärschlüssel - ID -Primärschlüssel + Atomic Tabelle - 1NF, das erste Normalformfeld kann nicht weiter aufgeteilt werden, sondern erfüllt die erste Normalform.
 - 2NF, die zweite normale Form erfüllt die erste normale Form und es können keine teilweisen Abhängigkeiten auftreten.
 Teilweise Abhängigkeiten können vermieden werden, indem der Primärschlüssel beseitigt wird. Fügen Sie einzelne Spaltenschlüsselwörter hinzu.
 - 3NF, die dritte normale Form erfüllt die zweite normale Form und es können keine transitiven Abhängigkeiten auftreten.
 Ein Feld hängt vom Primärschlüssel ab, und andere Felder hängen davon ab. Dies ist eine transitive Abhängigkeit.
 Die Daten einer Entitätsinformation werden in einer Tabelle platziert.


/* wählen */ ------------------

Wählen Sie [alle | DIRTION] select_expr von -> wobei -> Gruppe nach [Aggregatfunktion] -> mit -> Bestellung nach -> Grenze

a
 - Sie können * verwenden, um alle Felder anzugeben.
 Wählen Sie * aus TB;
 - Ausdrücke können verwendet werden (Berechnungsformeln, Funktionsaufrufe und Felder sind ebenfalls Ausdrücke)
 Wählen Sie Stu, 29+25, jetzt () aus TB;
 - Sie können Aliase für jede Spalte verwenden. Nützlich zur Vereinfachung der Spaltenidentifikation und zur Vermeidung der Duplikation mehrerer Spaltenkennung.
 - Verwenden Sie das AS -Keyword oder lassen Sie es weg.
 Wählen Sie Stu+10 als Add10 aus TB aus;

b.
 - Sie können einem Tisch einen Alias ​​geben. Verwenden Sie das Keyword.
 Wählen Sie * aus TB1 als TT, TB2 als BB;
 - Mehrere Tabellen können nach der From-Klausel erscheinen.
 - Mehrere Tabellen sind horizontal zusammengestapelt und die Daten bilden ein kartesisches Produkt.
 Wählen Sie * aus TB1, TB2;

c.
 - Integer 1 repräsentiert wahr, 0 repräsentiert false.
 - Ein Ausdruck besteht aus Operatoren und Operanden.
 - Operanden: Variablen (Felder), Werte, Funktionsrückgabewerte- Operatoren:
 =, <=>, <>,! =, <=, <,> =,>!, &&, ||, 
 in (nicht) null, (nicht) wie, (nicht) in (nicht) zwischen und, ist (nicht) und oder, nicht, xor
 ist/ist nicht plus wahr/falsch/unbekannt, um die Wahrheit eines Wertes zu überprüfen.
 Nach der Gruppierung werden sie sortiert. Ascending: ASC, Abstieg: Desc
 
 Die folgenden Aggregatfunktionen müssen mit Gruppen verwendet werden von:
 Die Anzahl gibt die Anzahl der verschiedenen Nicht-Null-Werte zurück (*), zählt (Feld)
 Die Summe stellt fest, dass die Summe max den Maximalwert min ermittelt, findet der Mindestwert AVG, dass die durchschnittliche Wertstufe gruppe_concat ein Zeichenfolgenergebnis mit den verketteten Nicht-Null-Werten aus einer Gruppe zurückgibt. Intra-Gruppen-String-Verkettung.

e.
 Wo die Erkennungsdaten am Anfang ausgeführt werden und die ursprünglichen Daten filtern.
 Die gefilterten Ergebnisse erneut filtern.
 Das Feld mit dem Feld muss abgefragt werden und das Feld muss in der Datentabelle vorhanden sein.
 Wo können Feld Aliase nicht verwenden, aber können. Denn wenn der Code ausgeführt wird, wurde der Spaltenwert möglicherweise noch nicht ermittelt.
 Wo aggregierte Funktionen nicht verwendet werden können. Im Allgemeinen wird nur dann verwendet, wenn eine Gesamtfunktion benötigt wird.
 Für den SQL -Standard müssen Spalten in der Gruppe nach Klausel oder in einer Aggregatfunktion verwendeten Spalten referenziert werden.

f.
 Ascending: ASC, Abstieg: Desc
 Unterstützt das Sortieren auf mehreren Feldern.

g. Behandeln Sie die verarbeiteten Ergebnisse als Set in der Reihenfolge, in der die Datensätze angezeigt werden, wobei der Index ab 0 beginnt.
 Begrenzen Sie die Startposition und lassen Sie den ersten Parameter aus, wenn Sie die Anzahl der Einträge abrufen, ab Index 0. Begrenzung Die Anzahl der Datensätze h.
 Kombiniert die Ergebnisse mehrerer Auswahlabfragen zu einem einzigen Ergebnissatz.
 Wählen Sie ... Union [alle | Unterscheidet] auswählen ...
 Der Standardmodus, dh alle zurückgegebenen Zeilen sind eindeutig, wird empfohlen, jede ausgewählte Abfrage in Klammern zu wickeln.
 Wenn die Bestellung von zur Sortierung verwendet wird, muss die Grenze für die Kombination hinzugefügt werden.
 Die Anzahl der Felder in jeder ausgewählten Abfrage muss gleich sein.
 Die Feldliste (Nummer, Typ) jeder ausgewählten Abfrage sollte konsistent sein, da die Feldnamen im Ergebnis auf der ersten Auswahlanweisung basieren.


/ * Unterabfrage */ ----------------------
 - Unterabfragen müssen in Klammern eingeschlossen sein.
- vom Typ Typ benötigt eine Tabelle danach, und das Unterabfrageergebnis muss einen Alias ​​erhalten.
 - Vereinfachen Sie die Bedingungen in jeder Abfrage.
 - Der From -Typ muss eine temporäre Tabelle mit dem Ergebnis generieren, mit dem die Sperre der Originaltabelle freigegeben werden kann.
 - Die Unterabfrage gibt eine Tabelle, Tischtyp -Unterabfrage zurück.
 Wählen Sie * aus (auswählen * aus TB, wobei ID> 0) als Unterfrom wobei ID> 1;
- WO TYPT - Die Unterabfrage gibt einen Wert zurück, eine skalare Unterabfrage.
 - Keine Notwendigkeit, Unterabfragen Aliase zu geben.
 - Die Tabelle in der Unterabfrage kann nicht direkt aktualisiert werden.
 Wählen Sie * aus TB, wobei Money = (max (Geld) aus TB);
 - Spaltenabfrage Wenn das Unterabbildungsergebnis eine Spalte zurückgibt.
 Verwenden Sie in oder nicht, um die Abfrage zu vervollständigen, und nicht existiert die Bedingungen. Oft verwendet, um die Bedingungen zu beurteilen.
 Wählen Sie Spalte1 aus T1 aus, wo existiert (aus T2 auswählen);
 - Die Zeile-Abfrage-Abfrage-Bedingung ist eine Zeile.
 Wählen Sie * aus T1 WHERE (ID, Geschlecht) in (Wählen Sie ID, Geschlecht aus T2);
 Zeilenkonstruktor: (col1, col2, ...) oder row (col1, col2, ...)
 Zeilenkonstruktoren werden häufig verwendet, um Unterabfragen zu vergleichen, die zwei oder mehr Spalten zurückgeben.

 - Special Operator! = All () entspricht nicht in
 = Einige () entsprechen in. Jeder ist ein Alias ​​für einige!
 Alle können mit anderen Bedienern verwendet werden.


/ * Schließen Sie die Abfrage an (Join) */ --------------------------
 Sie können Felder aus mehreren Tabellen anschließen und Verbindungsbedingungen angeben.
- Innere Join
 - Die Standardeinstellung ist innerer Join, innerlich kann es weggelassen werden.
 - Eine Verbindung kann nur gesendet werden, wenn Daten vorhanden sind. Das heißt, es können keine leeren Zeilen im Verbindungsergebnis geben.
 On zeigt die Verbindungsbedingung an. Sein bedingter Ausdruck ähnelt der wo. Sie können auch den Zustand weglassen (was bedeutet, dass sie immer wahr ist)
 Sie können auch verwenden, wo Sie den Join -Zustand ausdrücken können.
 Es wird auch verwendet, aber die Feldnamen müssen gleich sein. Verwenden Sie (Feldname)

 - Cross Join
 Das heißt, es gibt keine bedingte innere Verbindung.
 Wählen Sie * aus TB1 Cross Join TB2;
- äußerer Join
 - Wenn die Daten nicht vorhanden sind, wird auch in den Verbindungsergebnissen angezeigt.
 --LEft Outer Join
 Wenn die Daten nicht vorhanden sind, erscheint der linke Tabellenaufzeichnung und die rechte Tabelle wird mit Null - Right Outer Join gefüllt
 Wenn die Daten nicht vorhanden sind, erscheint der rechte Tabellenaufzeichnung und die linke Tabelle wird mit Null - Natural Join gefüllt
 Bestimmen Sie automatisch die Verbindungsbedingungen und vervollständigen Sie die Verbindung.
 Dies entspricht der Auslassung von Verwendung, und der gleiche Feldname wird automatisch durchsucht.
 Natürlicher Join
 Natural links Join
 Natürlicher Rechtsverbinden

Wählen Sie info.id, info.name, info.stu_num, extra_info.hobby, extra_info.sex aus info, extra_info wobei info.stu_num = extra_info.stu_id;

/ * Importieren und exportieren */ ----------------------
Wählen Sie in der Outfile -Datei [Steuerformat] aus dem Tabellenname aus. ds beendet von '\ t' von '' entschlossen durch '\\' '
 Beendet mit 'String' - beendet von 'char' - verpackt von 'char' - entkommen - Beispiel:
 Wählen Sie A, B, A+B in die Outfile '/tmp/result.text' '
 Felder beendet von '', 'optional von' "'eingeschlossen' '
 Mit '\n' abgeschlossene Zeilen
 VON Testtabelle;
Leitungssteuerungsformat Standard: Zeilen, die mit '\ n' beendet wurden
 Beendet mit 'String'-Kündig / * Einfügen * / ----------------------
Die von der Auswahlanweisung erhaltenen Daten können mit dem Einfügen eingefügt werden.

Die Spaltenspezifikation kann weggelassen werden, und die erforderlichen Werte () -Krackets liefern die Werte aller Felder in Spaltenreihenfolge.
 Oder verwenden Sie die Set -Syntax.
 In TBL_NAME SET Field = Value, ...;

Mehrere Werte können gleichzeitig in Form von (), (), () verwendet werden.
 In tbl_name values ​​(), (), () einfügen;

Sie können Ausdrücke verwenden, wenn Sie Spaltenwerte angeben.
 In TBL_NAME -Werte einfügen (field_value, 10+10, jetzt ());
Ein besonderer Wert, Standard, kann verwendet werden, um anzuzeigen, dass die Spalte den Standardwert verwendet.
 In TBL_NAME -Werte einfügen (field_Value, Standard);

Sie können das Ergebnis einer Abfrage als der zugefügte Wert verwenden.
 In TBL_NAME SELECT einfügen ...;

Sie können angeben, dass, wenn ein eingefügter Wert mit dem Primärschlüssel (oder einem eindeutigen Index) in Konflikt steht, die Informationen anderer nicht primärer Schlüsselspalten aktualisiert werden.
 In TBL_NAME VALUTS/SET/SECE/SELECT ON DUPLICATE KEY -UPDATE -Feld = Wert,…;

/* löschen */ ------------------
Löschen Sie aus TBL_NAME [wo wo_definition] [order by ...] [limit row_count]

Löschen Sie die maximale Anzahl von Datensätzen, die gemäß den angegebenen Bedingungen gelöscht werden sollen. Limit

Kann durch Sortieren von Bedingungen gelöscht werden. bestellen nach + limit

Unterstützt die Multi-Tabelle-Löschung unter Verwendung einer ähnlichen Join-Syntax.
Löschen Sie von den Bedürfnissen zum Löschen von Daten aus mehreren Tabellen 1 und 2 unter Verwendung von Tabellenverbindungsbedingungen.

/ * abschneide */ ----------------------
TRUNCATE [TABLE] TBL_NAME
Der Unterschied zwischen dem Löschen von Daten, dem Löschen und Wiederaufbau der Tabelle:
1. TRUNCATE ist, die Tabelle zu löschen und sie dann zu erstellen, das Löschen nacheinander. Aber Delete wird nicht wissen, dass 3, Truncate nicht weiß, wie viele Datensätze gelöscht wurden, aber Delete weißt es.
4. Bei Verwendung für partitionierte Tabellen bewahrt Tricate die Partitionen / * Backup und Wiederherstellung * / --------------------------
Sicherung, speichern Sie die Datenstruktur und die Daten in der Tabelle.
Dies geschieht mit dem Befehl mysqldump.

-Exportieren Sie 1. Exportieren Sie eine Tabelle mySQLDUMP -U-Benutzername-P-Kennwort-Datenbank Name Tabelle Name> Dateiname (d: /a.sql)
2. Exportieren Sie mehrere Tabellen MySQLDUMP -U -Benutzername -P -Kennwort Datenbank Name Tabelle 1 Tabelle 2 Tabelle 3> Dateiname (d: /a.sql)
3.. Exportieren Sie alle Tabellen mySQldump -U -Benutzername -P -Kennwort Datenbankname> Dateiname (d: /a.sql)
4. Exportieren Sie eine Bibliothek mySQLDUMP -U -Benutzername -P Kennwort -B Bibliotheksname> Dateiname (d: /a.sql)

Sie können -W verwenden, um Backup -Bedingungen zu tragen -importieren Sie 1. Wenn Sie sich bei MySQL anmelden:
  Quellsicherungsdatei 2. ohne Anmeldung, MySQL -U-Benutzername -P-Kennwort-Datenbank Name <Sicherungsdatei / * Ansicht * / --------------------------
Was ist eine Ansicht:
 Eine Ansicht ist eine virtuelle Tabelle, deren Inhalt durch eine Abfrage definiert wird. Wie eine echte Tabelle besteht eine Ansicht aus einer Reihe benannter Datenspalten und -zeilen. Eine Ansicht liegt allerdings nicht als gespeicherter Satz von Datenwerten in der Datenbank vor. Die Zeilen- und Spaltendaten stammen aus den Tabellen, auf die von der Abfrage verwiesen wird, die die Ansicht definiert, und werden dynamisch generiert, wenn auf die Ansicht verwiesen wird.
 視圖具有表結構文件,但不存在數據文件。
 Eine Ansicht wirkt wie ein Filter für die zugrunde liegenden Tabellen, auf die sie verweist.定義視圖的篩選可以來自當前或其它數據庫的一個或多個表,或者其它視圖。通過視圖進行查詢沒有任何限制,通過它們進行數據修改時的限制也很少。
 視圖是存儲在數據庫中的查詢的sql語句,它主要出于兩種原因:安全原因,視圖可以隱藏一些數據,如:社會保險基金表,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使復雜的查詢易于理解和使用。

-- 創建視圖CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement
 - 視圖名必須唯一,同時不能與表重名。
 - 視圖可以使用select語句查詢到的列名,也可以自己指定相應的列名。
 - 可以指定視圖執行的算法,通過ALGORITHM指定。
 - column_list如果存在,則數目必須等于SELECT語句檢索的列數-- 查看結構SHOW CREATE VIEW view_name 

-- 刪除視圖- 刪除視圖后,數據依然存在。
 - 可同時刪除多個視圖。
 DROP VIEW [IF EXISTS] view_name ...

-- 修改視圖結構- 一般不修改視圖,因為不是所有的更新視圖都會映射到表上。
 ALTER VIEW view_name [(column_list)] AS select_statement

-- 視圖作用1. 簡化業務邏輯2. 對客戶端隱藏真實的表結構-- 視圖算法(ALGORITHM)
 MERGE 合并將視圖的查詢語句,與外部查詢需要先合并再執行!
 TEMPTABLE 臨時表將視圖執行完畢后,形成臨時表,再做外層查詢!
 UNDEFINED 未定義(默認),指的是MySQL自主去選擇相應的算法。



/* 事務(transaction) */ ------------------
事務是指邏輯上的一組操作,組成這組操作的各個單元,要不全成功要不全失敗。 
 - 支持連續SQL的集體成功或集體撤銷。
 - 事務是數據庫在數據晚自習方面的一個功能。
 - 需要利用InnoDB 或BDB 存儲引擎,對自動提交的特性支持完成。
 - InnoDB被稱為事務安全型引擎。

-- 事務開啟START TRANSACTION; 或者BEGIN;
 開啟事務后,所有被執行的SQL語句均被認作當前事務內的SQL語句。
-- 事務提交COMMIT;
-- 事務回滾ROLLBACK;
 如果部分操作發生問題,映射到事務開啟前。

-- 事務的特性1. 原子性(Atomicity)
 事務是一個不可分割的工作單位,事務中的操作要么都發生,要么都不發生。
 2. Konsistenz
 事務前后數據的完整性必須保持一致。
 - 事務開始和結束時,外部數據一致- 在整個事務過程中,操作是連續的3. 隔離性(Isolation)
 多個用戶并發訪問數據庫時,一個用戶的事務不能被其它用戶的事物所干擾,多個并發事務之間的數據要相互隔離。
 4. Haltbarkeit
 一個事務一旦被提交,它對數據庫中的數據改變就是永久性的。

-- 事務的實現1. 要求是事務支持的表類型2. 執行一組相關的操作前開啟事務3. 整組操作完成后,都成功,則提交;如果存在失敗,選擇回滾,則會回到事務開始的備份點。

-- 事務的原理利用InnoDB的自動提交(autocommit)特性完成。
 普通的MySQL執行語句后,當前的數據提交操作均可被其他客戶端可見。
 而事務是暫時關閉“自動提交”機制,需要commit提交持久化數據操作。

-- 注意1. 數據定義語言(DDL)語句不能被回滾,比如創建或取消數據庫的語句,和創建、取消或更改表或存儲的子程序的語句。
 2. 事務不能被嵌套-- 保存點SAVEPOINT 保存點名稱-- 設置一個事務保存點ROLLBACK TO SAVEPOINT 保存點名稱-- 回滾到保存點RELEASE SAVEPOINT 保存點名稱-- 刪除保存點-- InnoDB自動提交特性設置SET autocommit = 0|1; 0表示關閉自動提交,1表示開啟自動提交。
 - 如果關閉了,那普通操作的結果對其他客戶端也不可見,需要commit提交后才能持久化數據操作。
 - 也可以關閉自動提交來開啟事務。但與START TRANSACTION不同的是,
 SET autocommit是永久改變服務器的設置,直到下次再次修改該設置。(針對當前連接)
 而START TRANSACTION記錄開啟前的狀態,而一旦事務提交或回滾后就需要再次開啟事務。(針對當前事務)


/* 鎖表*/
表鎖定只用于防止其它客戶端進行不正當地讀取和寫入MyISAM 支持表鎖,InnoDB 支持行鎖-- 鎖定LOCK TABLES tbl_name [AS alias]
-- 解鎖UNLOCK TABLES


/* Auslösen */ ------------------
 觸發程序是與表有關的命名數據庫對象,當該表出現特定事件時,將激活該對象監聽:記錄的增加、修改、刪除。

-- 創建觸發器CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt
 Parameter:
 trigger_time是觸發程序的動作時間。它可以是before 或after,以指明觸發程序是在激活它的語句之前或之后觸發。
 trigger_event指明了激活觸發程序的語句的類型INSERT:將新行插入表時激活觸發程序UPDATE:更改某一行時激活觸發程序DELETE:從表中刪除某一行時激活觸發程序tbl_name:監聽的表,必須是永久性的表,不能將觸發程序與TEMPORARY表或視圖關聯起來。
 trigger_stmt:當觸發程序激活時執行的語句。執行多個語句,可使用BEGIN...END復合語句結構-- 刪除DROP TRIGGER [schema_name.]trigger_name

可以使用old和new代替舊的和新的數據更新操作,更新前是old,更新后是new.
 刪除操作,只有old.
 增加操作,只有new.

-- 注意1. 對于具有相同觸發程序動作時間和事件的給定表,不能有兩個觸發程序。


-- 字符連接函數concat(str1[, str2,...])

-- 分支語句if 條件then
 執行語句elseif 條件then
 執行語句else
 執行語句end if;

-- 修改最外層語句結束符delimiter 自定義結束符號SQL語句自定義結束符號delimiter ; -- 修改回原來的分號-- 語句塊包裹begin
 語句塊end

-- 特殊的執行1. 只要添加記錄,就會觸發程序。
2. Insert into on duplicate key update 語法會觸發:
 如果沒有重復記錄,會觸發before insert, after insert;
 如果有重復記錄并更新,會觸發before insert, before update, after update;
 如果有重復記錄但是沒有發生更新,則觸發before insert, before update
3. Replace 語法如果有記錄,則執行before insert, before delete, after delete, after insert


/* SQL編程*/ ------------------

--// 局部變量----------
-- 變量聲明declare var_name[,...] type [default value] 
 這個語句被用來聲明局部變量。要給變量提供一個默認值,請包含一個default子句。值可以被指定為一個表達式,不需要為一個常數。如果沒有default子句,初始值為null。 

-- 賦值使用set 和select into 語句為變量賦值。

 - 注意:在函數內是可以使用全局變量(用戶自定義的變量)


--// 全局變量----------
-- 定義、賦值set 語句可以定義并為變量賦值。
set @var = value;
也可以使用select into語句為變量初始化并賦值。這樣要求select語句只能返回一行,但是可以是多個字段,就意味著同時為多個變量進行賦值,變量的數量需要與查詢的列數一致。
還可以把賦值語句看作一個表達式,通過select執行完成。此時為了避免=被當作關系運算符看待,使用:=代替。(set語句可以使用= 和:=)。
select @var:=20;
select @v1:=id, @v2=name from t1 limit 1;
select * from tbl_name where @var:=30;

select into 可以將表中查詢獲得的數據賦給變量。
 -| select max(height) into @max_height from tb;

-- 自定義變量名為了避免select語句中,用戶自定義的變量與系統標識符(通常是字段名)沖突,用戶自定義變量在變量名前使用@作為開始符號。
@var=10;

 - 變量被定義后,在整個會話周期都有效(登錄到退出)


--// 控制結構----------
-- if語句if search_condition then 
 Anweisungsliste 
[elseif search_condition then
 statement_list]
...
[anders
 statement_list]
Ende wenn;

-- case語句CASE value WHEN [compare-value] THEN result
[WHEN [compare-value] THEN result ...]
[ELSE result]
ENDE


-- while循環[begin_label:] while search_condition do
 Anweisungsliste
end while [end_label];

- 如果需要在循環內提前終止while循環,則需要使用標簽;標簽需要成對出現。

 -- 退出循環退出整個循環leave
 退出當前循環iterate
 通過退出的標簽決定退出哪個循環--// 內置函數----------
-- 數值函數abs(x) -- 絕對值abs(-10.9) = 10
format(x, d) -- 格式化千分位數值format(1234567.456, 2) = 1,234,567.46
ceil(x) -- 向上取整ceil(10.1) = 11
floor(x) -- 向下取整floor (10.1) = 10
round(x) -- 四舍五入去整mod(m, n) -- m%nm mod n 求余10%3=1
pi() -- 獲得圓周率pow(m, n) -- m^n
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::3s::::::333:33333333333333333333ag33333333333333333333333333333 es333333333333333333333333333333 es33 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann dann dann dann aber33333333333333333333 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 nicht3 dann3 dann3 aber3 dann3 nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht nicht dann nichtie dasen aber aber abersossoss aberstens aberstensss aberten aber abers :::::::::::
instr(string ,substring) -- 返回substring首次在string中出現的位置concat(string [,...]) -- 連接字串charset(str) -- 返回字串字符集lcase(string) -- 轉換成小寫left(string, length) -- 從string2中的左邊起取length個字符load_file(file_name) -- 從文件讀取內容locate(substring, string [,start_position]) -- 同instr,但可指定開始位置lpad(string, length, pad) -- 重復用pad加在string開頭,直到字串長度為length
ltrim(string) -- 去除前端空格repeat(string, count) -- 重復count次rpad(string, length, pad) --在str后用pad補充,直到長度為length
rtrim(string) -- 去除后端空格strcmp(string1 ,string2) -- 逐字符比較兩字串大小-- 流程函數case when [condition] then result [when [condition] then result ...] [else result] end 多分支if(expr1,expr2,expr3) 雙分支。

-- 聚合函數count()
Summe();
max();
min();
avg();
Gruppe_Verkettung()

-- 其他常用函數md5();
Standard();


--// 存儲函數,自定義函數----------
-- 新建CREATE FUNCTION function_name (參數列表) RETURNS 返回值類型函數體- 函數名,應該合法的標識符,并且不應該與已有的關鍵字沖突。
 - 一個函數應該屬于某個數據庫,可以使用db_name.funciton_name的形式執行當前函數所屬數據庫,否則為當前數據庫。
 - 參數部分,由"參數名"和"參數類型"組成。多個參數用逗號隔開。
 - 函數體由多條可用的mysql語句,流程控制,變量聲明等語句構成。
 - 多條語句應該使用begin...end 語句塊包含。
 - 一定要有return 返回值語句。

-- 刪除DROP FUNCTION [IF EXISTS] function_name;

-- 查看SHOW FUNCTION STATUS LIKE 'partten'
 SHOW CREATE FUNCTION function_name;

-- 修改ALTER FUNCTION function_name 函數選項--// 存儲過程,自定義功能----------
-- 定義存儲存儲過程是一段代碼(過程),存儲在數據庫中的sql組成。
一個存儲過程通常用于完成一段業務邏輯,例如報名,交班費,訂單入庫等。
而一個函數通常專注與某個功能,視為其他程序服務的,需要在其他語句中調用函數才可以,而存儲過程不能被其他調用,是自己執行通過call執行。

-- 創建CREATE PROCEDURE sp_name (參數列表)
 過程體參數列表:不同于函數的參數列表,需要指明參數類型IN,表示輸入型OUT,表示輸出型INOUT,表示混合型注意,沒有返回值。


/* 存儲過程*/ ------------------
存儲過程是一段可執行性代碼的集合。相比函數,更偏向于業務邏輯。
調用:CALL 過程名-- 注意- 沒有返回值。
- 只能單獨調用,不可夾雜在其他語句中-- 參數IN|OUT|INOUT 參數名數據類型IN 輸入:在調用過程中,將數據輸入到過程體內部的參數OUT 輸出:在調用過程中,將過程體處理完的結果返回到客戶端INOUT 輸入輸出:既可輸入,也可輸出-- 語法CREATE PROCEDURE 過程名(參數列表)
BEGINNEN
 過程體END


/* Benutzer- und Berechtigungsverwaltung */ ------------------
Benutzerinformationstabelle: mysql.user
-- FLUSH-PRIVILEGIEN
-- 增加用戶CREATE USER 用戶名IDENTIFIED BY [PASSWORD] 密碼(字符串)
 – Sie müssen über das globale CREATE USER-Privileg für die MySQL-Datenbank oder über das INSERT-Privileg verfügen.
 - Kann nur Benutzer erstellen, kann aber keine Berechtigungen erteilen.
 - Benutzername, beachten Sie die Anführungszeichen: zB 'Benutzername'@'192.168.1.1'
 - Das Passwort muss ebenfalls in Anführungszeichen gesetzt werden, und rein numerische Passwörter müssen ebenfalls in Anführungszeichen gesetzt werden. - Um das Passwort im Klartext anzugeben, lassen Sie das Schlüsselwort PASSWORD weg. Um das Kennwort als Hashwert anzugeben, der von der Funktion PASSWORD() zurückgegeben wird, schließen Sie das Schlüsselwort PASSWORD ein.
-- 重命名用戶RENAME USER old_user TO new_user
-- 設置密碼SET PASSWORD = PASSWORD('密碼') -- 為當前用戶設置密碼SET PASSWORD FOR 用戶名= PASSWORD('密碼') -- 為指定用戶設置密碼-- 刪除用戶DROP USER 用戶名-- 分配權限/添加用戶GRANT 權限列表ON 表名TO 用戶名[IDENTIFIED BY [PASSWORD] 'password']
 - all privileges 表示所有權限- *.* 表示所有庫的所有表- 庫名.表名表示某庫下面的某表-- 查看權限SHOW GRANTS FOR 用戶名-- 查看當前用戶權限SHOW GRANTS; 或SHOW GRANTS FOR CURRENT_USER; 或SHOW GRANTS FOR CURRENT_USER();
-- 撤消權限REVOKE 權限列表ON 表名FROM 用戶名REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用戶名-- 撤銷所有權限-- 權限層級-- 要使用GRANT或REVOKE,您必須擁有GRANT OPTION權限,并且您必須用于您正在授予或撤銷的權限。
全局層級:全局權限適用于一個給定服務器中的所有數據庫,mysql.user
 GRANT ALL ON *.* und REVOKE ALL ON *.* erteilen und widerrufen nur globale Privilegien.
數據庫層級:數據庫權限適用于一個給定數據庫中的所有目標,mysql.db, mysql.host
 GRANT ALL ON db_name.* und REVOKE ALL ON db_name.* erteilen und entziehen nur Datenbankberechtigungen.
表層級:表權限適用于一個給定表中的所有列,mysql.talbes_priv
 Mit den Befehlen GRANT ALL ON db_name.tbl_name und REVOKE ALL ON db_name.tbl_name können nur Tabellenberechtigungen gewährt und widerrufen werden.
列層級:列權限適用于一個給定表中的單一列,mysql.columns_priv
 Wenn Sie REVOKE verwenden, müssen Sie dieselben Spalten angeben, die gewährt werden sollen.
-- Berechtigungsliste ALL [PRIVILEGES] -- Alle einfachen Berechtigungen außer GRANT OPTION ALTER setzen -- Verwendung von ALTER TABLE erlauben
ALTER ROUTINE – Ändern oder Löschen einer gespeicherten Prozedur CREATE – Aktivieren der Verwendung von CREATE TABLE
CREATE ROUTINE -- eine gespeicherte Routine erstellen CREATE TEMPORARY TABLES -- Verwendung von CREATE TEMPORARY TABLE zulassen
BENUTZER ERSTELLEN – Ermöglicht die Verwendung der Funktionen „BENUTZER ERSTELLEN“, „BENUTZER LÖSCHEN“, „BENUTZER UMBENENNEN“ und „ALLE PRIVILEGIEN WIDERRUFEN“.
CREATE VIEW -- Ermöglicht die Verwendung von CREATE VIEW
DELETE -- Ermöglicht die Verwendung von DELETE
DROP - Ermöglicht die Verwendung von DROP TABLE
EXECUTE -- Ermöglicht dem Benutzer, eine gespeicherte Prozedur auszuführen. FILE -- Ermöglicht die Verwendung von SELECT ... INTO OUTFILE und LOAD DATA INFILE.
INDEX - Ermöglicht die Verwendung von CREATE INDEX und DROP INDEX
INSERT -- Ermöglicht die Verwendung von INSERT
LOCK TABLES – Ermöglicht Ihnen, LOCK TABLES auf Tabellen anzuwenden, für die Sie über SELECT-Berechtigungen verfügen.
PROZESS - Aktivieren Sie die Verwendung von „Vollständige Prozessliste anzeigen“.
REFERENCES -- nicht implementiert RELOAD -- FLUSH ist erlaubt
REPLICATION CLIENT -- ermöglicht dem Benutzer, die Adresse eines Slave- oder Master-Servers anzufordern. REPLICATION SLAVE -- für Replikations-Slave-Server (liest Binärlog-Ereignisse vom Master-Server)
SELECT -- Ermöglicht die Verwendung von SELECT
SHOW DATABASES -- Zeigt alle Datenbanken an SHOW VIEW -- Ermöglicht die Verwendung von SHOW CREATE VIEW
SHUTDOWN – ermöglicht die Verwendung von mysqladmin shutdown
SUPER – Ermöglicht die Verwendung der Anweisungen CHANGE MASTER, KILL, PURGE MASTER LOGS und SET GLOBAL sowie des Debug-Befehls mysqladmin; ermöglicht Ihnen die (einmalige) Verbindung, auch wenn die Anzahl der Verbindungen erreicht wurde.
UPDATE -- Ermöglicht die Verwendung von UPDATE
USAGE - Synonym für "keine Privilegien" GRANT OPTION - Gewährung von Privilegien erlauben /* Tabellenwartung */
--Analysieren und speichern Sie die Schlüsselwortverteilung der Tabelle ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE Tabellenname…
-- Überprüfen Sie eine oder mehrere Tabellen auf Fehler CHECK TABLE tbl_name [, tbl_name] ... [Option] ...
Option = {SCHNELL | SCHNELL | MITTEL | ERWEITERT | GEÄNDERT}
-- Defragmentieren Sie die Datendatei OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...


/* Verschiedenes*/ ---------------------
1. 可用反引號(`)為標識符(庫名、表名、字段名、索引、別名)包裹,以避免與關鍵字重名!中文也可以作為標識符!
2. 每個庫目錄存在一個保存當前數據庫的選項文件db.opt。
3. 注釋:
 單行注釋# 注釋內容多行注釋/* 注釋內容*/
 單行注釋-- 注釋內容(標準SQL注釋風格,要求雙破折號后加一空格符(空格、TAB、換行等))
4. 模式通配符:
 _ 任意單個字符% 任意多個字符,甚至包括零字符單引號需要進行轉義\'
5. CMD命令行內的語句結束符可以為";", "\G", "\g",僅影響顯示結果。其他地方還是用分號結束。delimiter 可修改當前對話的語句結束符。
6. SQL對大小寫不敏感7. 清除已有語句:\c

5.5.8、常用的SQL

/*==============================================================*/
/* DBMS name: MySQL 5.0 */
/* Created on: 2017/3/5 10:29:05 */
/*==============================================================*/


drop table if exists Address;

drop table if exists ArticleComment;

drop table if exists ArticleType;

drop table if exists Articles;

drop table if exists DictSub;

drop table if exists DictTop;

drop table if exists OrderPdt;

drop table if exists Orders;

drop table if exists ProductComment;

drop table if exists Products;

drop table if exists Users;

/*==============================================================*/
/* Table: Address */
/*==============================================================*/
create table Address
(
 `AddressId` int not null auto_increment comment '收貨地址編號',
 `UserId` int not null comment '用戶編號',
 `Province` varchar(50) not null comment '省',
 `City` varchar(50) not null comment '市',
 `County` varchar(50) not null comment '縣/區',
 `Street` varchar(300) not null comment '詳細地址',
 `RevName` varchar(30) not null comment '收貨人姓名',
 `PostCode` varchar(20) comment '郵政編碼',
 `Mobile` varchar(50) not null comment '手機',
 `Phone` varchar(50) comment '電話',
 `IsDefault` bool comment '是否為默認地址',
 primary key (AddressId)
);

alter table Address comment '收貨地址';

/*==============================================================*/
/* Table: ArticleComment */
/*==============================================================*/
create table ArticleComment
(
 `ArticleCommentId` int not null auto_increment comment '文章評論編號',
 `ArticleId` int not null comment '文章編號',
 `UserId` int not null comment '用戶編號',
 `ArticleCommentContent` varchar(4000) not null comment '文章評論內容',
 `ArticleCommentDate` timestamp default CURRENT_TIMESTAMP comment '文章評論時間',
 `ArticleCommentState` int default 1 comment '狀態',
 `ArticleRemark` int comment '打分',
 `ArticleCommentReserver1` varchar(4000) comment '備用1',
 `ArticleCommentReserver2` varchar(4000) comment '備用2',
 primary key (ArticleCommentId)
);

alter table ArticleComment comment '文章評論';

/*==============================================================*/
/* Table: ArticleType */
/*==============================================================*/
create table ArticleType
(
 `ArticleTypeId` int not null auto_increment comment '文章欄目編號',
 `ArticleTypeName` varchar(200) comment '文章欄目名稱',
 `ArticleTypeState` int default 1 comment '狀態',
 `ArticleTypeDesc` varchar(4000) comment '文章欄目描述',
 `ArticleTypePicture` varchar(400) comment '文章欄目圖片',
 `ArticleTypeReserve1` varchar(4000) comment '備用1',
 `ArticleTypeReserve2` varchar(4000) comment '備用2',
 primary key (ArticleTypeId)
);

alter table ArticleType comment '文章欄目';

/*==============================================================*/
/* Table: Articles */
/*==============================================================*/
create table Articles
(
 `ArticleId` int not null auto_increment comment '文章編號',
 `ArticleTypeId` int not null comment '文章欄目編號',
 `ArticleTitle` varchar(400) not null comment '文章標題',
 `ArticleContent` text comment '文章內容',
 `ArticleDate` timestamp default CURRENT_TIMESTAMP comment '文章發布時間',
 `ArticleAuthor` varchar(200) comment '文章發布者',
 `ArticleFileName` varchar(100) comment '靜態文件名',
 `ArticleThumbNail` varchar(200) comment '縮略圖片',
 `ArticleAddition` varchar(200) comment '附件名稱',
 `ArticleLevel` int comment '顯示的優先級',
 `ArticleIsAllowComment` integer default 1 comment '是否允許評論',
 `ArticleState` int default 1 comment '狀態',
 `ArticleHotCount` int comment '點擊次數',
 `ArticleReserve1` varchar(4000) comment '備用1',
 `ArticleReserve2` varchar(4000) comment '備用2',
 `ArticleReserve3` numeric(8,0) comment '備用3',
 primary key (ArticleId)
);

alter table Articles comment '文章';

/*==============================================================*/
/* Table: DictSub */
/*==============================================================*/
create table DictSub
(
 `SubId` int not null auto_increment comment '子項編號',
 `DictId` int not null comment '字典編號',
 `SubName` varchar(200) not null comment '子項名稱',
 `SubDesc` varchar(4000) comment '子項描述',
 `SubReserve1` varchar(4000) comment '保留備用1',
 primary key (SubId)
);

alter table DictSub comment '字典子項';

/*==============================================================*/
/* Table: DictTop */
/*==============================================================*/
create table DictTop
(
 `DictId` int not null auto_increment comment '字典編號',
 `DictName` varchar(100) not null comment '字典名稱',
 `DictDesc` varchar(4000) comment '字典描述',
 `DictReserve1` varchar(4000) comment '保留備用',
 primary key (DictId)
);

alter table DictTop comment '字典';

/*==============================================================*/
/* Table: OrderPdt */
/*==============================================================*/
create table OrderPdt
(
 `OrderPdtId` int not null auto_increment comment '訂單商品編號',
 `Id` int not null comment '編號',
 `UserId` int not null comment '用戶編號',
 `OrderId` int comment '訂單號',
 `PdtAmount` int comment '訂購數量',
 `PdtPrice` decimal comment '單價',
 `PdtReserve1` varchar(2000) comment '備用1',
 `PdtReserve2` varchar(4000) comment '備用2',
 primary key (OrderPdtId)
);

alter table OrderPdt comment '訂單商品';

/*==============================================================*/
/* Table: Orders */
/*==============================================================*/
create table Orders
(
 `OrderId` int not null auto_increment comment '訂單號',
 `AddressId` int not null comment '收貨地址編號',
 `OrderState` int default 1 comment '訂單狀態',
 `ExpressNO` varchar(50) comment '快遞編號',
 `ExpressName` varchar(50) comment '快遞名稱',
 `PayMoney` decimal comment '應支付',
 `PayedMoney` decimal comment '已支付',
 `SendInfo` varchar(300) comment '發貨人信息',
 `BuyDate` timestamp default CURRENT_TIMESTAMP comment '下單時間',
 `PayDate` datetime comment '支付時間',
 `SendDate` datetime comment '發貨時間',
 `ReceivDate` datetime comment '收貨時間',
 `OrderMessage` varchar(4000) comment '附言',
 `UserId` integer comment '用戶編號',
 `OrderReserve1` varchar(4000) comment '備用1',
 `OrderReserve2` varchar(4000) comment '備用2',
 `OrderReserve3` decimal comment '備用3',
 primary key (OrderId)
);

alter table Orders comment '訂單';

/*==============================================================*/
/* Table: ProductComment */
/*==============================================================*/
create table ProductComment
(
 `ProductCommentId` int not null auto_increment comment '商品評論編號',
 `ProductId` int not null comment '商品編號',
 `UserId` int not null comment '用戶編號',
 `ProductCommentContent` varchar(4000) comment '商品評論內容',
 `ProductCommentDate` timestamp default CURRENT_TIMESTAMP comment '商品評論時間',
 `ProductCommentState` int comment '狀態',
 `ProductCommentRemark` int comment '打分',
 `ProductCommentReserve1` varchar(4000) comment '備用1',
 `ProductCommentReserve2` varchar(4000) comment '備用2',
 primary key (ProductCommentId)
);

alter table ProductComment comment '商品評論';

/*==============================================================*/
/* Table: Products */
/*==============================================================*/
create table Products
(
 `Id` int not null auto_increment comment '編號',
 `Name` varchar(200) not null comment '名稱',
 `SubIdColor` int not null comment '所屬顏色',
 `SubIdBrand` int not null comment '所屬品牌',
 `SubIdInlay` int not null comment '所屬鑲嵌',
 `SubIdMoral` int not null comment '所屬寓意',
 `SubIdMaterial` int not null comment '所屬種水',
 `SubIdTopLevel` int not null comment '一級分類編號',
 `MarketPrice` decimal comment '市場參考價',
 `MyPrice` decimal not null comment '玉源直銷價',
 `Discount` decimal default 1 comment '折扣',
 `Picture` varchar(200) comment '圖片',
 `Amount` int comment '庫存量',
 `Description` text comment '詳細描述',
 `State` int default 1 comment '狀態',
 `AddDate` timestamp default CURRENT_TIMESTAMP comment '上貨日期',
 `Hang` int comment '掛件',
 `RawStone` int comment '賭石',
 `Size` varchar(200) comment '尺寸',
 `ExpressageName` varchar(100) comment '快遞名稱',
 `Expressage` decimal comment '快遞費',
 `AllowComment` int default 1 comment '是否允許評論',
 `Reserve1` varchar(4000) comment '保留備用1',
 `Reserve2` varchar(4000) comment '保留備用2',
 `Reserve3` decimal(0) comment '保留備用3',
 primary key (Id)
);

alter table Products comment '商品';

/*==============================================================*/
/* Table: Users */
/*==============================================================*/
create table Users
(
 `UserId` int not null auto_increment comment '用戶編號',
 `UserName` varchar(200) not null comment '用戶名',
 `Password` varchar(512) not null comment '密碼',
 `Email` varchar(100) not null comment '郵箱',
 `Sex` varchar(10) comment '性別',
 `State` int default 1 comment '狀態',
 `RightCode` int comment '權限狀態',
 `RegDate` timestamp default CURRENT_TIMESTAMP comment '注冊時間',
 `RegIP` varchar(200) comment '注冊IP',
 `LastLoginDate` datetime comment '最近登錄時間',
 `UserReserve1` varchar(4000) comment '保留備用1',
 `UserReserve2` varchar(4000) comment '保留備用2',
 `UserReserve3` varchar(4000) comment '保留備用3',
 primary key (UserId)
);

alter table Users comment '用戶';

alter table Address add constraint FK_AddressBelongUser foreign key (UserId)
 references Users (UserId) on delete restrict on update restrict;

alter table ArticleComment add constraint FK_ArticleCommentForArticle foreign key (ArticleId)
 references Articles (ArticleId) on delete restrict on update restrict;

alter table ArticleComment add constraint FK_ArticleCommentForUser foreign key (UserId)
 references Users (UserId) on delete restrict on update restrict;

alter table Articles add constraint FK_ArticleBelongType foreign key (ArticleTypeId)
 references ArticleType (ArticleTypeId) on delete restrict on update restrict;

alter table DictSub add constraint FK_BelongDict foreign key (DictId)
 references DictTop (DictId) on delete cascade on update cascade;

alter table OrderPdt add constraint FK_BelongOrder foreign key (OrderId)
 references Orders (OrderId) on delete cascade on update cascade;

alter table OrderPdt add constraint FK_CartForUser foreign key (UserId)
 references Users (UserId) on delete restrict on update restrict;

alter table OrderPdt add constraint FK_OrderDepProduct foreign key (Id)
 references Products (Id) on delete restrict on update restrict;

alter table Orders add constraint FK_OrderBelongAddress foreign key (AddressId)
 references Address (AddressId) on delete restrict on update restrict;

alter table ProductComment add constraint FK_ProductCommentBelongUsers foreign key (UserId)
 references Users (UserId) on delete restrict on update restrict;

alter table ProductComment add constraint FK_ProductCommentForProduct foreign key (ProductId)
 references Products (Id) on delete restrict on update restrict;

alter table Products add constraint FK_BelongBrand foreign key (SubIdMaterial)
 references DictSub (SubId) on delete restrict on update restrict;

alter table Products add constraint FK_BelongColor foreign key (SubIdBrand)
 references DictSub (SubId) on delete restrict on update restrict;

alter table Products add constraint FK_BelongInlay foreign key (SubIdInlay)
 references DictSub (SubId) on delete restrict on update restrict;

alter table Products add constraint FK_BelongMaterial foreign key (SubIdColor)
 references DictSub (SubId) on delete restrict on update restrict;

alter table Products add constraint FK_BelongMoral foreign key (SubIdTopLevel)
 references DictSub (SubId) on delete restrict on update restrict;

alter table Products add constraint FK_BelongTopLevel foreign key (SubIdMoral)
 references DictSub (SubId) on delete restrict on update restrict;

六、下載程序、幫助、視頻

MySQL綠色版下載地址1:https://pan.baidu.com/s/1hrS5KUw 密碼: sug9

MySQL綠色版下載地址2:https://www.jb51.net/softs/594937.html

MySQL文檔下載1:https://pan.baidu.com/s/1nuGQo57 密碼: 898h

MySQL文檔下載2:https://www.jb51.net/books/11598.html

MySQL5.5.27_64位安裝包下載地址1: https://pan.baidu.com/s/1minwz1m 密碼: ispn

MySQL5.5.56_64位安裝包下載地址2: https://www.jb51.net/softs/363920.html

MySQL5.7.17安裝包官網下載地址: https://dev.mysql.com/downloads/windows/installer/

文檔中沒有您可以查幫助:

<<:  Erweiterte Verwendungsbeispiele für den Befehl mv in Linux

>>:  Weitere Features der JavaScript-Konsole

Artikel empfehlen

Tutorial zur Installation und Konfiguration von MySQL 5.7 unter CentOS7 (YUM)

Installationsumgebung: CentOS7 64-Bit, MySQL5.7 1...

MySQL-Sortierung mittels Index-Scan

Inhaltsverzeichnis Installieren Sie Sakila Index-...

So konfigurieren Sie Nginx, um die Zugriffshäufigkeit derselben IP zu begrenzen

1. Fügen Sie den folgenden Code zu http{} in ngin...

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

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

Lösung für leere Seite nach Vue-Verpackung

1. Lösung für das Problem, dass die Seite leer is...

Detaillierte Erklärung der Truncate-Verwendung in MySQL

Vorwort: Wenn wir eine Tabelle löschen möchten, v...

CSS transparenter Rahmen Hintergrund-Clip-Magie

In diesem Artikel wird hauptsächlich die wunderba...

Einfache und schnelle Einführung in die React-Routing-Entwicklung

Installieren Geben Sie zur Installation den folge...

mysql IS NULL mit Indexfallerklärung

Einführung Die Verwendung von „ist null“, „ist ni...

jQuery erzielt den Effekt einer Werbung, die nach oben und unten gescrollt wird

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