Heim >Datenbank >MySQL-Tutorial >Detaillierte Einführung in die grundlegende Datenbanktheorie
1. Datenbankparadigma
Erstes Paradigma: Spalten sind unteilbar, z. B.: [Kontakt] (Name, Geschlecht, Telefonnummer), ein Kontakt hat eine private Telefonnummer und Firmentelefonnummer, dann erreicht dieses Tabellenstrukturdesign nicht 1NF
Zweite Normalform: Es gibt einen Primärschlüssel, der eine vollständige Abhängigkeit gewährleistet. Beispiel: Bestelldetailstabelle [OrderDetail] (OrderID, ProductID, UnitPrice, Discount, Quantity, ProductName), Discount (Discount), Quantity (Quantity) sind vollständig vom Primärschlüssel (OderID, ProductID) abhängig, während UnitPrice und ProductName nur davon abhängen on Für ProductID entspricht es nicht 2NF;
Dritte Normalform: keine transitive Abhängigkeit (Nicht-Primärschlüssel-Spalte A hängt von Nicht-Primärschlüssel-Spalte B ab, Nicht-Primärschlüssel-Spalte B hängt von der Primärschlüssel-Spalte ab Schlüssel), zB: Bestelltabelle [Order] (OrderID, OrderDate, CustomerID, CustomerName, CustomerAddr, CustomerCity) Der Primärschlüssel ist (OrderID), CustomerName, CustomerAddr, CustomerCity hängt direkt von CustomerID ab (nicht primäre Schlüsselspalte) und nicht Es hängt direkt vom Primärschlüssel ab und entspricht daher nicht 3NF.
2. Was ist ein Anti-Pattern?
Paradigma kann Datenredundanz vermeiden, den Datenbankspeicherplatz reduzieren und die Probleme bei der Aufrechterhaltung der Datenintegrität verringern.
Durch das Datenbanknormalisierungsdesign erhöht sich jedoch die Anzahl der am Datenbankgeschäft beteiligten Tabellen, und die beteiligten Geschäftstabellen müssen möglicherweise über Verbindungen mit mehreren Tabellen abgefragt werden, was zu einer schlechten Leistung führt und nicht förderlich ist zu Unterdatenbanken. Aus Gründen der Leistungspriorität kann es daher erforderlich sein, in der Datenbankstruktur ein Anti-Pattern-Design zu verwenden, das heißt Platz gegen Zeit einzutauschen und Datenredundanz einzuführen, um damit verbundene Abfragen zwischen Tabellen zu vermeiden. Was das Problem der Datenkonsistenz betrifft, so sollten die gespeicherten Daten im Allgemeinen so konsistent wie möglich unter den Benutzern sein, da es schwierig ist, eine starke Datenkonsistenz zu erreichen, um sicherzustellen, dass das System nach der Selbstwiederherstellung und -korrektur in kurzer Zeit schließlich Konsistenz erreicht Zeitspanne.
Anti-Patterns müssen beim Entwurf von Datenbanken sorgfältig eingesetzt werden. Verwenden Sie im Allgemeinen so weit wie möglich ein normalisiertes Datenbankdesign, da ein normalisiertes Datenbankdesign das Produkt flexibler machen und die Datenintegrität auf Datenbankebene aufrechterhalten kann.
Manchmal besteht die beste Möglichkeit zur Leistungsverbesserung darin, redundante Daten in derselben Tabelle zu speichern. Wenn eine kleine Menge schmutziger Daten toleriert werden kann, ist die Erstellung einer völlig unabhängigen Übersichtstabelle oder Cache-Tabelle eine sehr gute Methode. . Beispielsweise kann das Entwerfen einer „Download-Zähltabelle“ zum Zwischenspeichern von Download-Zählinformationen die Geschwindigkeit der Abfrage von Gesamtinformationen bei großen Datenmengen erhöhen.
Ein weiteres typisches Szenario: Aus Skalierbarkeitsgründen können Spalten vom Typ BLOB und TEXT zum Speichern strukturierter JSON-Daten verwendet werden. Der Vorteil besteht darin, dass jederzeit neue Felder hinzugefügt werden können, ohne dass die Tabelle geändert werden muss Struktur. Allerdings liegen auch die Mängel dieses Entwurfs auf der Hand: Der gesamte Feldinhalt muss abgerufen und dekodiert werden, um die angegebenen Attribute zu erhalten, und Vorgänge wie Indizierung, Sortierung und Aggregation können nicht ausgeführt werden. Wenn Sie komplexere Nutzungsszenarien berücksichtigen müssen, empfiehlt sich daher eher die Verwendung einer Dokumentendatenbank wie MongoDB.
3. Datenbanktransaktion
Eine Transaktion ist eine unteilbare Folge von Datenbankoperationen und die Grundeinheit der Datenbank-Parallelitätskontrolle Die Datenbank wechselt von einem Konsistenzzustand in einen anderen Konsistenzzustand.
(1). Eigenschaften von Transaktionen
Atomizität: Eine Reihe von Datenbankoperationen, die in einer Transaktion enthalten sind, werden entweder alle erfolgreich ausgeführt oder alle werden zurückgesetzt.
Konsistente Konsistenz: Die Das Ausführungsergebnis der Transaktion muss dafür sorgen, dass die Datenbank von einem Konsistenzzustand in einen anderen übergeht.
Isolation: Gleichzeitig ausgeführte Transaktionen können sich nicht gegenseitig beeinflussen.
Dauerhaftigkeit: Sobald eine Transaktion festgeschrieben ist Änderungen an den Daten in der Datenbank sind dauerhaft.
(2) Durch Transaktionsparallelität verursachte Probleme
Dirty Read: Eine Transaktion liest nicht festgeschriebene Daten einer anderen Transaktion.
Nicht wiederholbares Lesen: Nicht wiederholbar Der Fokus von Das Lesen ist eine Änderung. Die Ergebnisse zweier Lesevorgänge unter denselben Bedingungen sind unterschiedlich, das heißt, die gelesenen Daten können durch andere Transaktionen geändert werden.
Phantomlesen: Der Schwerpunkt des Phantomlesens liegt auf dem Hinzufügen oder Löschen . Die Anzahl der unter gleichen Bedingungen zweimal ausgelesenen Datensätze ist unterschiedlich.
(3). Isolationsstufe
Die Isolationsstufe bestimmt die Auswirkungen, die Transaktionen in einer Sitzung auf Transaktionen in einer anderen Sitzung haben können.
Der ANSI-Standard definiert 4 Isolationsstufen, die von MySQLs InnoDB unterstützt werden, nämlich:
READ UNCOMMITTED (nicht festgeschriebenes Lesen): Die niedrigste Isolationsstufe, die normalerweise auch als Dirty Read bezeichnet wird, ermöglicht eins Transaktion zum Lesen von Daten, die nicht von einer anderen Transaktion festgeschrieben wurden, was die Leistung verbessern kann, aber zu Dirty-Read-Problemen führt
READ COMMITTED (festgeschriebener Lesevorgang): In einer Transaktion sind nur andere Transaktionen zulässig Diese Isolationsstufe kann das Problem des nicht wiederholbaren Lesens nicht vermeiden.
REPEATABLE READ (wiederholbares Lesen): Nach dem Start einer Transaktion sind Änderungen an der Datenbank durch andere Transaktionen in dieser Transaktion erst sichtbar Die Transaktion wird festgeschrieben oder zurückgesetzt. Allerdings sind die Einfüge-/Löschvorgänge anderer Transaktionen für diese Transaktion sichtbar, was bedeutet, dass diese Isolationsstufe das Phantomleseproblem nicht vermeiden kann. Die Ergebnisse einer wiederholten Auswahl in einer Transaktion sind dieselben, es sei denn, die Datenbank wird in dieser Transaktion aktualisiert.
SERIALIZABLE (serialisierbar): Die höchste Isolationsstufe, die nur die serielle Ausführung von Transaktionen zulässt.
Die Standardisolationsstufe von MySQL ist REPEATABLE READ.
4. Was ist eine gespeicherte Prozedur? Was sind die Vor- und Nachteile?
Eine gespeicherte Prozedur ist eine Sammlung von SQL-Anweisungen, die im Voraus kompiliert und in der Datenbank gespeichert wurden. Darüber hinaus ist eine gespeicherte Prozedur ein Codeblock, der aus einigen T-SQL-Anweisungen besteht, die einige Funktionen wie eine Methode implementieren (Hinzufügen, Löschen, Ändern und Abfragen einer einzelnen Tabelle oder mehrerer Tabellen) und dann diesen Code bereitstellen Geben Sie dem Block einfach einen Namen und rufen Sie ihn auf, wenn Sie diese Funktion verwenden. Gespeicherte Prozeduren weisen die folgenden Merkmale auf:
Gespeicherte Prozeduren werden nur dann kompiliert, wenn sie erstellt werden. Es besteht keine Notwendigkeit, die gespeicherte Prozedur jedes Mal neu zu kompilieren Sobald sie ausgeführt werden, kann der Prozess die Ausführungseffizienz der Datenbank verbessern.
4.2 Wenn sich die SQL-Anweisung ändert, können Sie nur die gespeicherte Prozedur in der Datenbank ändern
4.3. Reduzieren Sie die Netzwerkübertragung auf dem Client. Natürlich ist die Datenmenge, die durch den Aufruf einer gespeicherten Prozedur übertragen wird, geringer als bei der Ausführung einer Reihe von SQL.
4.4 indirekt kontrolliert auf die Datenbank zugreifen und so die Datensicherheit gewährleisten.
5. Lassen Sie uns kurz über die Unterschiede zwischen „Drop“, „Delete“ und „Truncate“ sprechen.
Drop, „Delete“ und „Truncate“ bedeuten in SQL alle „Löschen“, aber es gibt einige Unterschiede zwischen den dreien. Unterschied:
Löschen wird verwendet, um alle oder einen Teil der Datenzeilen in der Tabelle zu löschen Lösen Sie den Vorgang für diese Tabelle aus.
Truncate löscht alle Daten in der Tabelle. Dieser Vorgang kann nicht rückgängig gemacht werden und löst keine Trigger für diese Tabelle aus ;
Der Drop-Befehl löscht die Tabelle aus der Datenbank. Alle Datenzeilen, Indizes und Berechtigungen werden ebenfalls gelöscht. Alle DML-Trigger werden nicht ausgelöst und dieser Befehl kann nicht zurückgesetzt werden.
Wenn eine Tabelle nicht mehr benötigt wird, verwenden Sie „Drop“, wenn Sie einige Datenzeilen löschen möchten. Wenn Sie die Tabelle beibehalten, aber alle Daten löschen möchten, verwenden Sie „Truncate“.
6. Was ist eine Ansicht? Was ist ein Cursor?
Eine Ansicht ist eine virtuelle Tabelle, normalerweise eine Teilmenge von Zeilen oder Spalten in einer oder mehreren Tabellen. Sie hat die gleichen Funktionen wie eine physische Tabelle und kann der Ansicht hinzugefügt werden. , Löschen, Ändern, Überprüfen und andere Vorgänge. Insbesondere haben Änderungen an der Ansicht keine Auswirkungen auf die zugrunde liegende Tabelle. Im Vergleich zu Abfragen mit mehreren Tabellen ist es für uns einfacher, Daten abzurufen.
Der Cursor verarbeitet die Abfrageergebnismenge effektiv als Einheit. Der Cursor kann auf einer bestimmten Zeile in der Zelle positioniert werden, um eine oder mehrere Zeilen aus der aktuellen Zeile im Ergebnissatz abzurufen. Sie können Änderungen an der aktuellen Zeile des Ergebnissatzes vornehmen. Cursor werden im Allgemeinen nicht verwendet, aber wenn Daten einzeln verarbeitet werden müssen, sind Cursor sehr wichtig.
Beim Betrieb von MySQL wissen wir, dass der MySQL-Abrufvorgang eine Reihe von Zeilen zurückgibt, die als Ergebnismenge bezeichnet werden. Der zurückgegebene Zeilensatz besteht aus allen Zeilen, die mit der SQL-Anweisung übereinstimmen (null oder mehr Zeilen). Mit einer einfachen SELECT-Anweisung gibt es beispielsweise keine Möglichkeit, die erste Zeile, die nächste Zeile oder die ersten 10 Zeilen abzurufen, noch gibt es eine einfache Möglichkeit, alle Zeilen einzeln zu verarbeiten (im Gegensatz zur Verarbeitung in Chargen). Manchmal ist es notwendig, in den abgerufenen Zeilen eine oder mehrere Zeilen vorwärts oder rückwärts zu verschieben. Aus diesem Grund werden Cursor verwendet. Ein Cursor ist eine auf dem MySQL-Server gespeicherte Datenbankabfrage. Es handelt sich nicht um eine SELECT-Anweisung, sondern um die von der Anweisung abgerufene Ergebnismenge. Nachdem der Cursor gespeichert wurde, kann die Anwendung nach Bedarf einen Bildlauf durchführen oder die darin enthaltenen Daten durchsuchen. Cursor werden hauptsächlich in interaktiven Anwendungen verwendet, bei denen der Benutzer durch Daten auf dem Bildschirm scrollen und die Daten durchsuchen oder Änderungen daran vornehmen muss.
7. Was ist ein Auslöser?
Ein Trigger ist ein mit einer Tabelle verknüpftes Datenbankobjekt, das ausgelöst wird, wenn definierte Bedingungen erfüllt sind, und den im Trigger definierten Satz von Anweisungen ausführt. Diese Funktion von Triggern kann Anwendungen dabei helfen, die Datenbankintegrität auf der Datenbankseite sicherzustellen.
8. Superschlüssel, Kandidatenschlüssel, Primärschlüssel, Fremdschlüssel
Superschlüssel: Der Satz von Attributen, der ein Tupel in einer Beziehung eindeutig identifizieren kann, wird als bezeichnet Super des relationalen Musterschlüssels. Ein Attribut kann als Superschlüssel verwendet werden, und auch die Kombination mehrerer Attribute kann als Superschlüssel verwendet werden. Der Superschlüssel enthält den Kandidatenschlüssel und den Primärschlüssel.
Kandidatenschlüssel: Es handelt sich um den minimalen Superschlüssel, also einen Superschlüssel ohne redundante Elemente.
Primärschlüssel: Eine Kombination von Datenspalten oder Attributen in einer Datenbanktabelle, die das gespeicherte Datenobjekt eindeutig und vollständig identifiziert. Eine Datenspalte kann nur einen Primärschlüssel haben und der Wert des Primärschlüssels darf nicht fehlen, d. h. er darf nicht null sein.
Fremdschlüssel: Der Primärschlüssel einer anderen Tabelle, der in einer Tabelle vorhanden ist, wird als Fremdschlüssel dieser Tabelle bezeichnet.
9. Was ist eine Transaktion? Was ist ein Schloss?
Transaktion: Es handelt sich um eine Gruppe von SQL-Anweisungen, die als logische Arbeitseinheit miteinander verbunden sind. Wenn eine Anweisungsoperation fehlschlägt, schlägt die gesamte Operation fehl und zukünftige Operationen werden auf den Status vor der Operation zurückgesetzt, oder Es wird einen Knoten geben. Um sicherzustellen, dass etwas entweder ausgeführt oder nicht ausgeführt wird, können Transaktionen verwendet werden. Damit eine gruppierte Anweisung als Transaktion betrachtet werden kann, muss sie die ACID-Tests bestehen, nämlich Atomizität, Konsistenz, Isolation und Haltbarkeit.
Sperre: In allen DBMS sind Sperren der Schlüssel zur Implementierung von Transaktionen. Sperren können die Integrität und Parallelität von Transaktionen sicherstellen. Genau wie eine Sperre im echten Leben kann sie den Besitzer bestimmter Daten für einen bestimmten Zeitraum daran hindern, bestimmte Daten oder Datenstrukturen zu nutzen. Selbstverständlich sind auch Schlösser in Ebenen unterteilt.
10. Datenbank-Sperrmechanismus
Der Datenbank-Sperrmechanismus besteht einfach darin, dass die Datenbank den gleichzeitigen Zugriff auf verschiedene gemeinsam genutzte Ressourcen ermöglicht. und der Zugriff ändert sich. Jede MySQL-Speicher-Engine verwendet drei Arten (Ebenen) von Sperrmechanismen: Sperren auf Zeilenebene, Sperren auf Seitenebene und Sperren auf Tabellenebene.
Sperren auf Tabellenebene (Tabellenebene): Das Sperren auf Tabellenebene ist der detaillierteste Sperrmechanismus unter den MySQL-Speicher-Engines. Das größte Merkmal dieses Sperrmechanismus besteht darin, dass die Implementierungslogik sehr einfach ist und nur minimale negative Auswirkungen auf das System hat. Das Erlangen und Freigeben von Sperren geht also sehr schnell. Da Sperren auf Tabellenebene die gesamte Tabelle auf einmal sperren, kann das Deadlock-Problem, das uns plagt, vermieden werden. Die größte negative Auswirkung einer großen Sperrgranularität besteht natürlich darin, dass die Wahrscheinlichkeit eines Konflikts um Sperrressourcen am höchsten ist, was die Effizienz erheblich verringert. Sperren auf Tabellenebene werden in Lesesperren und Schreibsperren unterteilt. Sperren auf Seitenebene (Seitenebene): Das Merkmal des Sperrens auf Seitenebene besteht darin, dass die Sperrgranularität zwischen Sperren auf Zeilenebene und Sperren auf Tabellenebene liegt, sodass der Ressourcenaufwand, der erforderlich ist, um die Sperre zu erhalten, und die gleichzeitige Verarbeitungsfähigkeit, die sie ermöglichen kann Bereitstellung sind auch Zwischen den beiden oben genannten. Darüber hinaus führen Sperren auf Seitenebene und Sperren auf Zeilenebene zu einem Deadlock. Sperrung auf Zeilenebene (Zeilenebene): Das größte Merkmal der Sperrung auf Zeilenebene besteht darin, dass die Granularität des gesperrten Objekts sehr gering ist und es sich auch um die kleinste Sperrgranularität handelt, die derzeit von großen Datenbankverwaltungssoftwares erreicht wird. Da die Sperrgranularität sehr gering ist, ist auch die Wahrscheinlichkeit eines Konflikts um Sperrressourcen minimal, was der Anwendung größtmögliche Möglichkeiten zur gleichzeitigen Verarbeitung bieten und die Gesamtleistung einiger Anwendungssysteme verbessern kann, die eine hohe Parallelität erfordern. Obwohl es große Vorteile bei der gleichzeitigen Verarbeitung bietet, bringt das Sperren auf Zeilenebene auch viele Nachteile mit sich. Da die Granularität der Sperrressourcen sehr gering ist, müssen jedes Mal mehr Dinge getan werden, um die Sperre zu erhalten und freizugeben, was natürlich zu einem höheren Verbrauch führt. Darüber hinaus ist das Sperren auf Zeilenebene auch am anfälligsten für Deadlocks. Die Sperren auf Zeilenebene von InnoDB sind ebenfalls in zwei Typen unterteilt: gemeinsame Sperren und exklusive Sperren. In ähnlicher Weise hat InnoDB auch das Konzept der Absichtssperren (Sperren auf Tabellenebene) eingeführt, sodass es beabsichtigte gemeinsame Sperren und absichtliche exklusive Sperren gibt, sodass InnoDB tatsächlich vorhanden ist Vier Arten von Sperren, nämlich Shared Lock (S), Exclusive Lock (X), Intention Shared Lock (IS) und Intention Exclusive Lock (IX).
In der MySQL-Datenbank erfolgt hauptsächlich eine Sperre auf Tabellenebene Wird von MyISAM, Memory, CSV und anderen nicht-transaktionalen Speicher-Engines verwendet. Die Sperrung auf Zeilenebene wird hauptsächlich von der Innodb-Speicher-Engine verwendet, und die Sperrung auf Seitenebene ist hauptsächlich die Sperrmethode der BerkeleyDB-Speicher-Engine.
Die Funktion der Absichtssperre besteht darin, dass, wenn eine Transaktion eine Ressourcensperre erhalten muss und die benötigte Ressource bereits durch eine exklusive Sperre belegt ist, die Transaktion der Tabelle, die gesperrt werden muss, eine entsprechende Sperre hinzufügen kann die Zeile. Absichtssperre. Wenn Sie eine gemeinsame Sperre benötigen, fügen Sie der Tabelle eine beabsichtigte gemeinsame Sperre hinzu. Wenn Sie eine exklusive Sperre für eine bestimmte Zeile (oder einige Zeilen) hinzufügen müssen, fügen Sie zunächst eine absichtliche exklusive Sperre für die Tabelle hinzu. Es können mehrere gemeinsam genutzte Absichtssperren gleichzeitig vorhanden sein, es kann jedoch nur eine exklusive Absichtssperre gleichzeitig vorhanden sein.
Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website: MySQL-Video-Tutorial
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die grundlegende Datenbanktheorie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!