Heim  >  Artikel  >  Datenbank  >  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
PHPznach vorne
2023-09-17 12:33:04911Durchsuche

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;

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)

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)

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)

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)

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)

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

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen