2009-08-04 15 views
5

Ich versuche, ein Update, in MySQL 5.0, von der Form zu tun:MySQL 1443: Was bedeutet das?

update mytable.myfield t 
set f = 'blah' 
where t.id in (select v.id from myview v where ...); 

MySQL sagt mir:

ErrorNr. 1443 
The definition of table 'v' prevents operation UPDATE on table 't'. 

Die Liste MySQL docs dieser Fehler, aber (wie üblich) don Sag nicht, was es bedeutet. Kann mir das jemand etwas näher bringen? Ich verweise nur auf die Ansicht in der Unterabfrage, und ich verweise nur auf die Tabelle in der Hauptabfrage, und ich weiß nicht, warum diese die Aktualisierung verhindern würde. Das einzige, was ich bei Google gefunden habe, ist ein Bug in der MySQL-Bug-Datenbank, der sich auf Trigger bezieht, aber (AFAIK) gibt es keine Trigger in meiner Datenbank.

+3

Verweist "myview" überall auf "mytable"? –

Antwort

7

Ich denke, die Ansicht myview auf dem Tisch Mytable beruhen muss, so dass es Änderungen an myfield macht, verliert sie verfolgen, was in der Ansicht ist und daher für eine illegale Update macht.

Ich würde empfehlen, die Definition von myview zu betrachten, so dass Sie Ihre Abfrage ohne Referenzierung schreiben können. Dann können Sie es vielleicht ausarbeiten.

Speichern Sie alternativ die Liste der IDs in einer temporären Tabelle und verwenden Sie diese für Ihre Unterabfrage.

Rob

+0

"dip die Liste der IDs in eine temporäre Tabelle" -> das ist, was ich getan habe. In (My) SQL hat das RDBMS, wann immer ich eine logisch korrekte Abfrage schreibe, die Erstellung von Provisorien nach Bedarf gehandhabt (EXPLAIN sagt das!), Sodass mir nicht in den Sinn kam, dass MySQL * jemals sagen könnte: "Ich bin nicht Ich werde das tun, weil ich eine temporäre Tabelle erstellen müsste "(allerdings in viel mehr verwirrenden Worten). Danke für den Tipp. – Ken