Heim  >  Artikel  >  Datenbank  >  Detaillierte Erläuterung der Ansichtsaktualisierung in MySQL

Detaillierte Erläuterung der Ansichtsaktualisierung in MySQL

黄舟
黄舟Original
2017-03-01 13:57:161877Durchsuche

Die Aktualisierbarkeit einer Ansicht hängt von der Definition der Abfrage in der Ansicht ab

1. Diejenigen in MySQL, die versuchen, es nicht aktualisierbar zu machen? Die folgenden Arten von Ansichten sind nicht aktualisierbar

1. SQL-Anweisung mit den folgenden Schlüsselwörtern: Aggregatfunktion ( Summe, Min., Max., Anzahl), eindeutig, Gruppe durch, mit, Vereinigung oder uinon alle

2. Ständige Ansicht

3.wählen Enthält Unterabfragen

4.join

5.aus einem nicht aktualisierbaren Versuch

6.Die Unterabfrage der where-Klausel bezieht sich auf die from-Klausel-Tabelle

2. UpdateBedingungseinschränkungen anzeigen

MIT [CASCADED |. LOCAL] CHECK OPTION bestimmt die Bedingungen für die Aktualisierung der Ansicht.

LOKAL bedeutet, dass diese Ansicht aktualisiert werden kann, solange die Bedingungen dieser Ansicht erfüllt sind

Kaskadiert Dann müssen alle Ansichtsbedingungen für diese Ansicht erfüllt sein, bevor sie aktualisiert werden kann

Wenn nicht klar ist, ob es lokal oder kaskadiert ist, ist die Standardeinstellung Kaskade

Um das Verständnis zu erleichtern, werde ich es anhand von Beispielen veranschaulichen

Es ist bekannt, dass die Datenstruktur der t3-Tabelle wie folgt lautet:


-- 创建视图 ldq_t1
CREATE VIEW ldq_t1 AS 
SELECT 
  * 
FROM
  t3 
WHERE id1 > 10 WITH CHECK OPTION ;
-- 查询ldq_t1中的所有结果
SELECT * FROM ldq_t1;

-- 创建视图 ldq_t2
CREATE VIEW ldq_t2 AS 
SELECT 
  * 
FROM
  ldq_t1 
WHERE id1 < 30 WITH LOCAL CHECK OPTION ;

-- 创建视图 ldq_t3
CREATE VIEW ldq_t3 AS 
SELECT 
  * 
FROM
  ldq_t1 
WHERE id1 < 30  WITH  CHECK OPTION ;

-- 更新视图ldq_t2(只有ldq_t2中存在的数据都可以更新)
SELECT * FROM ldq_t2; -- 查看ldq_t2当前记录
UPDATE ldq_t2 SET id1=5 WHERE id2=22;  -- 可以执行成功
UPDATE ldq_t2 SET id1=35 WHERE id2=22;  -- 将会报错CHECK OPTION failed(因为执行该语句之后,id2=22记录将从ldq_t2消失)
UPDATE ldq_t2 SET id1=28 WHERE id2=22;  -- 可以执行成功


-- 更新ldq_t3
SELECT * FROM ldq_t3;
UPDATE ldq_t3 SET id1=5 WHERE id2=22;  -- 将会报错CHECK OPTION failed(因为数据更新之后,必须还要保证其仍然在ldq_t3和ldq_t1之中,
该语句执行后id2=22记录将从ldq_t1消失)
UPDATE ldq_t3 SET id1=15 WHERE id2=22; -- 能够执行成功
UPDATE ldq_t3 SET id1=35 WHERE id2=22; -- 将会报错CHECK OPTION failed(因为执行该语句之后,id2=22记录将从ldq_t3消失)
DELETE FROM  ldq_t3 WHERE id2=22;  -- 执行成功

Zusammenfassung: MIT Wenn Sie eine mit LOCAL CHECK OPTION geänderte Ansicht aktualisieren, müssen Sie nur sicherstellen, dass der aktualisierte Datensatz noch in der Ansicht vorhanden ist, und es wird kein Fehler gemeldet. Wenn WITH CASCADED CHECK OPTION die Ansicht ändert, müssen Sie sicherstellen, dass der aktualisierte Datensatz weiterhin in der Ansicht und den mit der Ansicht verknüpften Ansichten vorhanden ist.

Das Obige ist die detaillierte Erklärung der Ansichtsaktualisierung in MySQL. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).

Stellungnahme:
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