2009-08-04 27 views
5

estoy tratando de hacer una actualización, en MySQL 5.0, de la forma:MySQL 1443: ¿qué significa?

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

La lista de documentos MySQL este error, pero (como de costumbre) Don:

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

MySQL me dice No digas lo que significa. ¿Alguien puede arrojar algo de luz sobre esto para mí? Solo hago referencia a la vista en la subconsulta, y solo hago referencia a la tabla en la consulta principal, y no sé por qué esto evitaría la actualización. Lo único que encontré con google es un error en MySQL bug db relacionado con disparadores, pero (AFAIK) no hay disparadores en mi db.

+3

¿"myview" referencia "mytable" anywhere? –

Respuesta

7

creo que la vista myview debe basarse en la tabla mitabla, de manera que a medida que realiza cambios en myfield, se pierde la pista de lo que está en la vista y por lo tanto hace que para una actualización ilegal.

Recomendaría mirar la definición de myview, para que pueda escribir su consulta sin hacer referencia a ella. Entonces puede ser capaz de resolverlo.

O bien, descargue la lista de identificadores a una tabla temporal y utilícela para su subconsulta.

Rob

+0

"volcar la lista de identificadores en una tabla temporal" -> eso es lo que terminé haciendo. En (My) SQL, cada vez que escribo una consulta que es lógicamente correcta, el RDBMS ha manejado la creación de temporarios según sea necesario (¡EXPLAIN lo dice!), Así que no se me ocurrió que MySQL * podría * alguna vez decir "No soy va a hacer eso porque me requeriría crear una tabla temporal "(aunque en una jerga mucho más confusa). Gracias por el consejo. – Ken