Heim > Datenbank > MySQL-Tutorial > Wo könnten MySQL-Ansichten inkonsistent sein und wie kann ihre Konsistenz sichergestellt werden?

Wo könnten MySQL-Ansichten inkonsistent sein und wie kann ihre Konsistenz sichergestellt werden?

PHPz
Freigeben: 2023-09-17 12:33:04
nach vorne
928 Leute haben es durchsucht

Wo könnten MySQL-Ansichten inkonsistent sein und wie kann ihre Konsistenz sichergestellt werden?

Im Fall einer aktualisierbaren Ansicht aktualisieren wir wahrscheinlich Daten, die in der Ansicht nicht sichtbar sind, da die von uns erstellte Ansicht nur einen Teil der Tabellendaten anzeigt. Durch dieses Update wird die Ansicht inkonsistent. Wir können die Konsistenz der Ansicht sicherstellen, indem wir beim Erstellen oder Ändern der Ansicht MIT CHECK-OPTION verwenden. Obwohl die WITH CHECK OPTION-Klausel ein optionaler Teil der CREATE VIEW-Anweisung ist, ist sie sehr nützlich, um die Ansicht konsistent zu machen.

Grundsätzlich verhindert die WITH CHECK OPTION-Klausel, dass wir Zeilen aktualisieren oder einfügen, die in der Ansicht nicht sichtbar sind. Vereinfacht ausgedrückt können wir sagen, dass MySQL nach Verwendung der WITH CHECK OPTION-Klausel sicherstellt, dass der Einfüge- oder Aktualisierungsvorgang durch die Ansichtsdefinition bestätigt wird. Es folgt die Syntax der WITH CHECK OPTION-Klausel –

Syntax

CREATE OR REPLACE VIEW view_name AS Select_statement WITH CHECK OPTION;
Nach dem Login kopieren

Beispiel

Um das obige Konzept zu veranschaulichen, verwenden wir die folgenden Daten aus der Tabelle „Student_info“ –

mysql> Select * from student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Chandigarh | Literature |
| 125  | Raman   | Shimla     | Computers  |
| 130  | Ram     | Jhansi     | Computers  |
+------+---------+------------+------------+
4 rows in set (0.08 sec)
Nach dem Login kopieren

Nun mit Hilfe der folgenden Abfrage: Wir erstellen den Ansichtsnamen „Info“. Hier verwenden wir nicht WITH CHECK OPTION.

mysql> Create OR Replace VIEW Info AS Select Id, Name, Address, Subject from student_info WHERE Subject = 'Computers';
Query OK, 0 rows affected (0.46 sec)

mysql> Select * from info;
+------+-------+---------+-----------+
| Id   | Name  | Address | Subject   |
+------+-------+---------+-----------+
| 125  | Raman | Shimla  | Computers |
| 130  | Ram   | Jhansi  | Computers |
+------+-------+---------+-----------+
2 rows in set (0.00 sec)
Nach dem Login kopieren

Da wir WITH CHECK OPTION nicht verwenden, können wir eine neue Zeile in „Info“ einfügen/aktualisieren, auch wenn sie nicht mit ihrer Definition übereinstimmt. Die folgende Abfrage und ihre Ergebnisse veranschaulichen dies –

mysql> INSERT INTO Info(Id, Name, Address, Subject) values(132, 'Shyam','Chandigarh', 'Economics');
Query OK, 1 row affected (0.37 sec)

mysql> Select * from student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Chandigarh | Literature |
| 125  | Raman   | Shimla     | Computers  |
| 130  | Ram     | Jhansi     | Computers  |
| 132  | Shyam   | Chandigarh | Economics  |
+------+---------+------------+------------+
5 rows in set (0.00 sec)

mysql> Select * from info;
+------+-------+---------+-----------+
| Id   | Name  | Address | Subject   |
+------+-------+---------+-----------+
| 125  | Raman | Shimla  | Computers |
| 130  | Ram   | Jhansi  | Computers |
+------+-------+---------+-----------+
2 rows in set (0.00 sec)
Nach dem Login kopieren

Der Ergebnissatz oben zeigt, dass die neue Zeile nicht mit der Definition von „Info“ übereinstimmt und daher in der Ansicht nicht sichtbar ist. Nun erstellen wir in der folgenden Abfrage dieselbe Ansicht „Info“

, indem wir „WITH CHECK OPTION“ verwenden –

mysql> Create OR Replace VIEW Info AS Select Id, Name, Address, Subject from student_info WHERE Subject = 'Computers' WITH CHECK OPTION;
Query OK, 0 rows affected (0.06 sec)
Nach dem Login kopieren

Wenn wir nun versuchen, Zeilen einzufügen, die der Definition der Ansicht „Info“ entsprechen, erlaubt MySQL We Mach das. Dies kann aus der folgenden Abfrage und ihren Ergebnissen gelöscht werden.

mysql> INSERT INTO Info(Id, Name, Address, Subject) values(133, 'Mohan','Delhi','Computers');
Query OK, 1 row affected (0.07 sec)

mysql> Select * from info;
+------+-------+---------+-----------+
| Id   | Name  | Address | Subject   |
+------+-------+---------+-----------+
| 125  | Raman | Shimla  | Computers |
| 130  | Ram   | Jhansi  | Computers |
| 133  | Mohan | Delhi   | Computers  |
+------+-------+---------+-----------+
3 rows in set (0.00 sec)
Nach dem Login kopieren

Aber wenn wir versuchen, eine Zeile einzufügen, die nicht mit der Definition der Ansicht „Info“ übereinstimmt, lässt MySQL uns das nicht zu und wirft einen Fehler aus -

mysql> INSERT INTO Info(Id, Name, Address, Subject) values(134, 'Charanjeet','Amritsar','Geophysics');
ERROR 1369 (HY000): CHECK OPTION failed
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWo könnten MySQL-Ansichten inkonsistent sein und wie kann ihre Konsistenz sichergestellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage