2010-12-17 3 views
5

Ich habe eine Spalte und ich möchte einige seiner Zeilen bearbeiten. Das Problem ist, dass die Tabelle eine Ansicht ist, so dass ich die Zeilen nicht bearbeiten kann. Wie würde ich fortfahren, um dieses Problem zu lösen?Bearbeiten Sie eine schreibgeschützte Ansicht

Antwort

2

Wenn es sich um eine Ansicht handelt, handelt es sich nicht um eine Tabelle. Die Daten für die Ansicht stammen aus einer oder mehreren anderen Tabellen. Bearbeiten Sie die zugrunde liegende Tabelle, und wenn Sie die Daten in der Ansicht untersuchen, werden die vorgenommenen Änderungen angezeigt.

0

Eine SQL-Ansicht ist eine virtuelle Tabelle, die auf SQL SELECT-Abfrage basiert. Im Wesentlichen ist eine Ansicht sehr nahe an einer realen Datenbanktabelle (sie hat Spalten und Zeilen wie eine normale Tabelle), abgesehen von der Tatsache, dass die realen Tabellen Daten speichern, während die Ansichten dies nicht tun. Die Daten der Ansicht werden dynamisch generiert, wenn auf die Ansicht verwiesen wird. Eine Sicht verweist auf eine oder mehrere vorhandene Datenbanktabellen oder andere Ansichten. Tatsächlich ist jede Ansicht ein Filter der darin referenzierten Tabellendaten, und dieser Filter kann sowohl die Spalten als auch die Zeilen der referenzierten Tabellen einschränken.

Wenn Sie die Daten in Ihrer Tabelle ändern möchten, können Sie dies nicht mit einer Ansicht tun. SQL-Ansichten sind immer schreibgeschützt. Wenn Sie Ihre Tabelle außerhalb der Ansicht ändern möchten, verwenden Sie eine Anweisung wie etwa UPDATE oder ALTER TABLE.

+3

Ansichten sind sicherlich nicht * immer * Nur-Lese in den meisten Datenbanken (auch wenn das wahr ist in SQLite) . Die meisten Datenbanken unterstützen die Bearbeitung nicht aggregierter Ansichten für einzelne Tabellen. Einige Datenbanken unterstützen auch das Bearbeiten von Multi-Table-Ansichten. –

+0

Vielen Dank, dass Sie darauf hingewiesen haben. Sie können die Daten in einer Sicht aktualisieren, sofern Sie über die entsprechenden Berechtigungen für die zugrunde liegenden Tabellen verfügen. Sichten in SQLite sind jedoch immer schreibgeschützt. –

3

Mit SQLite können Sie Ansichten nicht aktualisieren. Aber es macht erlauben triggers auf Ansichten. Sie können also einen INSTEAD OF UPDATE Trigger schreiben, der die entsprechenden Änderungen an der zugrunde liegenden Tabelle vornimmt.

3

Wie dan04 gezeigt hat, können Sie Trigger verwenden, um Ansichten zu aktualisieren (wie in den meisten anderen Datenbanken). Für SQLite finden http://www.sqlite.org/lang_createtrigger.html#instead_of_trigger

Beispiel mit Blick namens „myview“, enthält eine Tabelle „my_t2“

CREATE TRIGGER myview_update INSTEAD OF UPDATE ON myview 
BEGIN 
    UPDATE my_t2 SET field1 = new.field1, field2 = new.field2 WHERE my_t2.key = old.key; 
END