Detaillierte Erklärung zum Erstellen einer aktualisierbaren Ansicht in MySQL

Detaillierte Erklärung zum Erstellen einer aktualisierbaren Ansicht in MySQL

Dieser Artikel beschreibt anhand eines Beispiels, wie eine aktualisierbare Ansicht in MySQL erstellt wird. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

Wir wissen, dass Ansichten in MySQL nicht nur abfragbar, sondern auch aktualisierbar sind. Das bedeutet, dass wir INSERT- oder UPDATE-Anweisungen verwenden können, um Zeilen der Basistabelle über eine aktualisierbare Ansicht einzufügen oder zu aktualisieren. Darüber hinaus können wir die Delete-Anweisung auch verwenden, um die Zeilen der zugrunde liegenden Tabelle über die Ansicht zu löschen. Um jedoch eine aktualisierbare Ansicht zu erstellen, darf die Select-Anweisung, die die Ansicht definiert, keines der folgenden Elemente enthalten:

  • Aggregatfunktionen wie Min, Max, Summe, Durchschnitt, Anzahl usw.
  • DISTINCT-Klausel
  • GROUP BY-Klausel
  • HAVING-Klausel
  • Linker Join oder äußerer Join.
  • UNION- oder UNION ALL-Klausel
  • In der FROM-Klausel erscheint eine Unterabfrage in der SELECT-Klausel oder eine Unterabfrage in einer Where-Klausel, die auf die Tabelle verweist.
  • Verweisen auf eine nicht aktualisierbare Ansicht in der FROM-Klausel
  • Nur wörtliche Werte zitieren
  • Mehrere Verweise auf eine beliebige Spalte einer Basistabelle

Wenn wir den Temptable-Algorithmus zum Erstellen einer Ansicht verwenden, können wir die Ansicht nicht aktualisieren. Manchmal können wir jedoch mithilfe innerer Verknüpfungen eine aktualisierbare Ansicht basierend auf mehreren Tabellen erstellen. Lassen Sie uns ohne weitere Umschweife einen Blick darauf werfen, wie eine aktualisierbare Ansicht erstellt wird. Versuchen wir zunächst, eine Ansicht namens „officeInfo“ basierend auf der Tabelle „offices“ zu erstellen, die auf drei Spalten in der Tabelle „offices“ verweist: „officeCode“, „phone“ und „city“:

ERSTELLEN ANSICHT officeInfo
 ALS
  Wählen Sie Bürocode, Telefon, Stadt
  VON Büros;

Verwenden Sie als Nächstes die folgende Anweisung, um Daten aus der OfficeInfo-Ansicht abzufragen:

WÄHLEN
  *
AUS
  BüroInfo;

Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse:

mysql> AUSWÄHLEN * VON officeInfo;
+------------+------------------+---------------+
| Bürocode | Telefon | Stadt |
+------------+------------------+---------------+
| 1 | +1 650 219 4782 | San Francisco |
| 2 | +1 215 837 0825 |
| 3 | +1 212 555 3000 |
| 4 | +33 14 723 4404 | Paris |
| 5 | +86 33 224 5000 | Peking |
| 6 | +61 2 9264 2451 |
| 7 | +44 20 7877 2041 |
+------------+------------------+---------------+
7 Reihen im Set

Verwenden Sie dann die folgende Aktualisierungsanweisung über die Ansicht „officeInfo“, um den Wert „officeCode“ in 4, die Bürotelefonnummer, zu ändern:

UPDATE BüroInfo
SATZ
  Telefon = '+86 089866668888'
WO
  BüroCode = 4;

Überprüfen Sie abschließend die Änderungen, indem Sie die Daten in der OfficeInfo-Ansicht abfragen:

mysql> AUSWÄHLEN
  *
AUS
  BüroInfo
WO
  BüroCode = 4;

+------------+------------------+----------+
| Bürocode | Telefon | Stadt |
+------------+------------------+----------+
| 4 | +86 089866668888 | Paris |
+------------+------------------+----------+
1 Reihe im Set

Wir können überprüfen, ob die Ansichten in der Datenbank aktualisierbar sind, indem wir die Spalte is_updatable aus der Ansichtstabelle in der Datenbank information_schema abfragen. Lassen Sie uns beispielsweise die Datenbank luyaran abfragen, um alle Ansichten abzurufen und anzuzeigen, welche Ansichten aktualisierbar sind:

WÄHLEN
  Tabellenname, ist aktualisierbar
AUS
  information_schema.views
WO
  table_schema = "Tabelle";

Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse:

+------------------+--------------+
| Tabellenname | ist aktualisierbar |
+------------------+--------------+
| überdurchschnittliche Produkte | JA |
| Großverkaufsauftrag | JA |
| Kundenbestellungen | NEIN |
| Büroinfo | JA |
| Verkaufprobestellung | NEIN |
+------------------+--------------+
5 Reihen im Set

Versuchen wir, Zeilen über eine Ansicht zu löschen. Erstellen Sie zunächst eine Tabelle mit dem Namen „items“, fügen Sie einige Zeilen in die Tabelle „items“ ein und erstellen Sie eine Ansicht, die Artikel mit einem Preis über 700 abfragt:

VERWENDEN Sie testdb;
-- Erstellen Sie eine neue Tabelle mit dem Namen „items“
CREATE TABLE-Elemente (
  ID INT AUTO_INCREMENT PRIMARY KEY,
  Name VARCHAR(100) NOT NULL,
  Preis DECIMAL(11 , 2 ) NICHT NULL
);
-- Daten in die Artikeltabelle einfügen
INSERT INTO Artikel (Name, Preis)
WERTE('Laptop',700,56),('Desktop',699,99),('iPad',700,50);
-- Erstellen Sie eine Ansicht basierend auf der Artikeltabelle
ERSTELLEN ANSICHT LuxuryItems AS
  WÄHLEN
    *
  AUS
    Artikel
  WO
    Preis > 700;
-- Daten aus der LuxuryItems-Ansicht abfragen
WÄHLEN
  *
AUS
  Luxusartikel;

Nach der Ausführung der obigen Abfrageanweisung werden die folgenden Ergebnisse erhalten:

+----+--------+--------+
| ID | Name | Preis |
+----+--------+--------+
| 1 | Laptop | 700,56 |
| 3 | iPad | 700.5 |
+----+--------+--------+
2 Reihen im Set

Verwenden Sie anschließend die DELETE-Anweisung, um die Zeile mit der ID 3 zu löschen:

LÖSCHEN AUS LuxuryItems
WO
  Ich würde = 3;

mysql gibt eine Meldung zurück, die angibt, dass 1 Zeile betroffen war:

Abfrage OK, 1 Zeile betroffen

Lassen Sie uns die Daten noch einmal über die Ansicht überprüfen:

mysql> SELECT * FROM Luxusartikel;
+----+--------+--------+
| ID | Name | Preis |
+----+--------+--------+
| 1 | Laptop | 700,56 |
+----+--------+--------+
1 Reihe im Set

Wir können auch Daten aus den Basistabellenelementen abfragen, um zu überprüfen, ob die DELETE-Anweisung die Zeile tatsächlich gelöscht hat:

mysql> AUSWÄHLEN * FROM Elemente;
+----+---------+--------+
| ID | Name | Preis |
+----+---------+--------+
| 1 | Laptop | 700,56 |
| 2 | Desktop | 699,99 |
+----+---------+--------+
2 Reihen im Set

Wir können sehen, dass die Zeile mit der ID 3 in der Basistabelle gelöscht wird.

Okay, das ist alles zu diesem Eintrag.

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“, „Zusammenfassung der Kenntnisse zu MySQL-Datenbanksperren“ und „Zusammenfassung der allgemeinen MySQL-Funktionen“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung zum Erstellen einer Ansicht (CREATE VIEW) und zu Nutzungsbeschränkungen in MySQL
  • So erstellen Sie eine Ansicht in MySQL
  • Detaillierte Analyse der Prinzipien und der Verwendung von MySQL-Ansichten
  • Detaillierte Erklärung der Verwendung und Unterschiede von MySQL-Ansichten und -Indizes
  • Eine kurze Diskussion über MySql-Ansichten, Trigger und gespeicherte Prozeduren
  • Detaillierte Erläuterung der gespeicherten Prozedur „MySql View Trigger“
  • Detaillierte Erklärung des Prinzips und der Verwendung von MySQL-Ansichten
  • Detaillierte Erläuterung des Ansichtsbeispiels zur MySQL-Ansichtsverwaltung [Hinzufügen-, Löschen-, Ändern- und Abfragevorgänge]
  • Der Unterschied zwischen Update und Select in MySQL für einzelne und mehrere Tabellen sowie Ansichten und temporäre Tabellen
  • mysql drei Tabellen verbunden, um eine Ansicht zu erstellen
  • MySQL View-Prinzipanalyse

<<:  Implementierung der Graustufenversion mit Nginx und Lua

>>:  Vue implementiert eine einfache Slider-Verifizierung

Artikel empfehlen

Grundlegende Verwendung und Beispiele von yum (empfohlen)

yum-Befehl Yum (vollständiger Name Yellow Dog Upd...

So finden Sie identische Dateien in Linux

Während der Nutzung des Computers entsteht im Sys...

MySQL bedingte Abfrage und/oder Verwendung und Priorität Beispielanalyse

Dieser Artikel veranschaulicht anhand von Beispie...

Anwendung zur Verarbeitung von HTML-Tag-Überläufen

Verwenden Sie CSS, um Bildlaufleisten zu ändern 1...

MySQL Deep Paging (wie man schnell Millionen von Daten paginiert)

Inhaltsverzeichnis Vorwort Fall Optimierung Zusam...

So überwachen Sie Array-Änderungen in Vue

Inhaltsverzeichnis Vorwort Quellcode Wo beginne i...

Prinzipien der MySQL-Datentypoptimierung

MySQL unterstützt viele Datentypen und die Auswah...

vue+element-ui implementiert die Kopfnavigationsleistenkomponente

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

Implementierungsmethoden gängiger CSS3-Animationen

1. Was ist CSS Animations ist ein vorgeschlagenes...

So verwenden Sie CSS-Medienabfragen mit einem geringeren Seitenverhältnis

CSS-Medienabfragen haben ein sehr praktisches Sei...