Detaillierte Erklärung zur Sicherstellung der Konsistenz von MySQL-Ansichten (mit Prüfoption)

Detaillierte Erklärung zur Sicherstellung der Konsistenz von MySQL-Ansichten (mit Prüfoption)

Dieser Artikel zeigt anhand eines Beispiels, wie die Konsistenz von MySQL-Ansichten sichergestellt werden kann (mit Prüfoption). Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

Manchmal erstellen wir eine Ansicht, um einen Teil der Daten in einer Tabelle anzuzeigen. Wir wissen, dass einfache Ansichten transparent sind, sodass Daten, die in der Ansicht nicht sichtbar sind, aktualisiert werden können. Durch diese Aktualisierung wird die Ansicht jedoch inkonsistent. Um die Konsistenz einer Ansicht sicherzustellen, verwenden Sie beim Erstellen oder Ändern einer Ansicht die aktualisierbare Klausel WITH CHECK OPTION. Schauen wir uns die grammatikalische Struktur der aktualisierbaren Klausel WITH CHECK OPTION an:

ANSICHT ERSTELLEN ODER ERSETZEN view_name 
ALS
 select_statement
 MIT PRÜFOPTION;

Wir sollten beachten, dass wir das Semikolon (;) am Ende der WITH CHECK OPTION-Klausel und nicht am Ende der Select-Anweisung setzen, um die Ansicht zu definieren. Versuchen wir nun, eine Ansicht mit dem Namen „vps“ basierend auf der Mitarbeitertabelle zu erstellen, um Mitarbeiter mit der Position VP anzuzeigen, z. B. VP Marketing und VP Sales:

Erstellen oder ersetzen Sie View VPS als
  WÄHLEN 
    Mitarbeiternummer,
    Nachname,
    Vorname,
    Berufsbezeichnung,
    Verlängerung,
    E-Mail,
    BüroCode,
    BerichteAn
  AUS
    Mitarbeiter
  WO
    Berufsbezeichnung WIE '%VP%';

Als nächstes fragen wir die Daten aus der VPS-Ansicht mit folgender Anweisung ab:

mysql> AUSWÄHLEN * VON vps;
+----------------+----------+--------------+---------------+---------------+-----------------------+------------+-----------+
| Mitarbeiternummer | Nachname | Vorname | Berufsbezeichnung | Durchwahl | E-Mail | Bürocode | Berichte an |
+----------------+----------+--------------+---------------+---------------+-----------------------+------------+-----------+
| 1056 | Hill | Mary | Vizepräsidentin Vertrieb | x4611 | [email protected] | 1 | 1002 |
| 1076 | Firrelli | Jeff | Vizepräsident Marketing | x9273 | [email protected] | 1 | 1002 |
+----------------+----------+--------------+---------------+---------------+-----------------------+------------+-----------+
2 Reihen im Set

Da es sich bei VPS um eine einfache Ansicht handelt, kann sie aktualisiert werden. Daher fügen wir über die VPS-Ansicht eine Zeile mit Mitarbeiterdateninformationen ein:

INSERT INTO vps(Mitarbeiternummer,Vorname,Nachname,Berufsbezeichnung,Durchwahl,E-Mail,Bürocode,Berichte an)
Werte (1703, „Lily“, „Bush“, „IT-Manager“, „x9111“, „[email protected]“, 1,1002);

Wir sollten beachten, dass die neu erstellte Mitarbeiterin in der VPS-Ansicht nicht sichtbar ist, da ihre Position die des IT-Managers und nicht des Vizepräsidenten ist. Verwenden Sie zur Überprüfung die folgende SELECT-Anweisung:

SELECT * FROM Mitarbeiter WHERE Mitarbeiternummer=1703;

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

+----------------+-----------+-------------+-----------+---------------------------+------------+-----------+-------------------------+
| Mitarbeiternummer | Nachname | Vorname | Durchwahl | E-Mail | Bürocode | Berichtet an | Berufsbezeichnung |
+----------------+-----------+-------------+-----------+---------------------------+------------+-----------+-------------------------+
| 1703 | Bush | Lily | x9111 | [email protected] | 1 | 1002 | IT-Manager |
| 1702 | Gerard | Martin | x2312 | [email protected] | 4 | 1102 | Vertriebsmitarbeiter |
| 1625 | Kato | Yoshimi | x102 | [email protected] | 5 | 1621 | Vertriebsmitarbeiter |
| 1621 | Nishi | Mami | x101 | [email protected] | 5 | 1056 | Vertriebsmitarbeiter |

Dies ist jedoch möglicherweise nicht das, was wir möchten, da die VPS-Ansicht VP-Mitarbeiter und nicht andere Mitarbeiter anzeigt. Um die Konsistenz der Ansicht sicherzustellen, können Benutzer daher nur Daten anzeigen oder aktualisieren, die über die Ansicht sichtbar sind. Verwenden Sie WITH CHECK OPTION, wenn Sie die Ansicht erstellen oder ändern:

Erstellen oder ersetzen Sie View vps als
  WÄHLEN 
    Mitarbeiternummer,
    Nachname,
    Vorname,
    Berufsbezeichnung,
    Verlängerung,
    E-Mail,
    BüroCode,
    BerichteAn
  AUS
    Mitarbeiter
  WO
    Berufsbezeichnung LIKE '%VP%' 
MIT PRÜFOPTION;

Wir müssen darauf achten, die Klausel WITH CHECK OPTION am Ende der Anweisung CREATE OR REPLACE hinzuzufügen. Fügen Sie danach über die VPS-Ansicht erneut eine Zeile in die Mitarbeitertabelle ein, wie unten gezeigt:

INSERT INTO vps(Mitarbeiternummer,Vorname,Nachname,Berufsbezeichnung,Durchwahl,E-Mail,Bürocode,Berichte an)
WERTE(1704,'John','Minsu','IT-Mitarbeiter','x9112','[email protected]',1,1703);

An diesem Punkt lehnt MySQL den Einfügevorgang ab und gibt die folgende Fehlermeldung aus:

Fehlercode: 1369 – CHECK OPTION fehlgeschlagen 'luyaran.vps'

Wir können einen Mitarbeiter mit der Position „SVP Marketing“ über die VPS-Ansicht in die Mitarbeitertabelle einfügen, um zu sehen, ob MySQL dies zulässt:

INSERT INTO vps(Mitarbeiternummer,Vorname,Nachname,Berufsbezeichnung,Durchwahl,E-Mail,Bürocode,Berichte an)
WERTE(1704,'John','Minsu','SVP Marketing','x9112','[email protected]',1,1076);

MySQL meldet 1 betroffene Zeile (Abfrage OK, 1 betroffene Zeile). Wir können den Einfügevorgang erneut überprüfen, indem wir die Daten gemäß der VPS-Ansicht abfragen:

WÄHLEN SIE * VON vps;

Wie die obige Abfrage zeigt, funktioniert es wie erwartet:

mysql> AUSWÄHLEN * VON vps;
+----------------+----------+-----------+---------------+---------------+--------------------------------+------------+-----------+
| Mitarbeiternummer | Nachname | Vorname | Berufsbezeichnung | Durchwahl | E-Mail | Bürocode | Berichte an |
+----------------+----------+-----------+---------------+---------------+--------------------------------+------------+-----------+
| 1056 | Hill | Mary | Vizepräsidentin Vertrieb | x4611 | [email protected] | 1 | 1002 |
| 1076 | Firrelli | Jeff | Vizepräsident Marketing | x9273 | [email protected] | 1 | 1002 |
| 1704 | Minsu | John | SVP Marketing | x9112 | [email protected] | 1 | 1076 |
+----------------+----------+-----------+---------------+---------------+--------------------------------+------------+-----------+
3 Reihen im Set

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:
  • MySql8 WITH RECURSIVE rekursive Abfrage Eltern-Kind-Sammlungsmethode
  • So beheben Sie den Fehler „Ein Windows-Dienst mit dem Namen MySQL ist bereits vorhanden.“ bei der Installation von MySQL
  • TIMESTAMP mit implizitem DEFAULT-Wert ist veralteter Fehler in MySQL 5.6
  • Lösung für MySQL-Fehler TIMESTAMP-Spalte mit CURRENT_TIMESTAMP
  • MySQL-Tipps: Lösung für das Problem, dass der Server beendet wird, ohne die PID-Datei zu aktualisieren
  • PHP SQL Injection mit MySQL
  • MySQL 8.0 MIT Abfragedetails

<<:  Verwenden von Nginx zum Implementieren der Graustufenversion

>>:  JavaScript navigator.userAgent erhält Browserinformationen – Fallerklärung

Artikel empfehlen

Detailliertes Tutorial zum Herunterladen und Installieren von mysql8.0.21

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

CSS implementiert die Bottom-Tapbar-Funktion

Viele Mobiltelefone verfügen mittlerweile über di...

CSS-Implementierungscode für verzerrte Schatten

Dieser Artikel stellt den Implementierungscode vo...

Grundlagen der HTML-Bearbeitung (ein Muss für Anfänger)

Öffnen Sie DREAMWEAVER und erstellen Sie ein neue...

Beispiel zum Einbetten von H5 in die Webansicht des WeChat-Applets

Vorwort WeChat-Miniprogramme bieten neue offene F...

So kapseln Sie Axios-Anfragen mit Vue

Tatsächlich ist es sehr einfach, Axios in Vue zu ...

Tutorial zu XHTML-Webseiten

Dieser Artikel soll vor allem Anfängern einige gr...

Grafisches Tutorial zur Installation von CentOS 7.3 auf VMWare

Die Installationsschritte für CentOS 7.3 werden a...

Webdesign-Tutorial (7): Verbesserung der Webdesign-Effizienz

<br />Vorheriger Artikel: Webdesign-Tutorial...

Die umfassendsten 50 Mysql-Datenbankabfrageübungen

Diese Datenbankabfrageanweisung ist eine von 50 D...

Detaillierter Prozessbericht der Nginx-Installation und -Konfiguration

Inhaltsverzeichnis 1 Einführung in nginx 1 Was is...