此查询在MySQL 5.7上失败
UPDATE `view_alm` SET `cantidad_de_producto`='3' WHERE `id_producto`='43' LIMIT 1;
同样的查询适用于MySQL 5.5和5.6。重要的是要强调" view_alm"是一个视图表。
MySQL 5.7上的查询结果是" 错误:UPDATE的目标表view_alm不可更新"。
我阅读了名为"可更新和可插入视图"关于MySQL的文档:documentation
我还检查了我的两个测试环境中的一些参数(一个环境是MySQL 5.7,另一个是MySQL 5.5)。
这是观点:
select `P`.`id_producto` AS `id_producto`,`P`.`id_cliente` AS `id_cliente`,`P`.`id_producto_definicion` AS `id_producto_definicion`,`P`.`caducidad` AS `caducidad`,`P`.`lote` AS `lote`,`P`.`cantidad_de_producto` AS `cantidad_de_producto`,`P`.`referencia_de_producto` AS `referencia_de_producto`,`P`.`id_tipo_stock` AS `id_tipo_stock`,`TS`.`nombre_stock` AS `nombre_stock`,`B`.`id_bulto` AS `id_bulto`,`BDEF`.`nombre` AS `nombre_bulto`,`C`.`id_contenedor` AS `id_contenedor`,`CDEF`.`nombre` AS `nombre_contenedor`,`U`.`id_ubicacion` AS `id_ubicacion`,`UDEF`.`codigo_de_ubicacion` AS `codigo_de_ubicacion` from ((((((((`productos` `P` left join `productos_definiciones` `PDEF` on((`P`.`id_producto_definicion` = `PDEF`.`id_producto_definicion`))) left join `bultos` `B` on((`B`.`id_bulto` = `P`.`bulto`))) left join `bultos_definiciones` `BDEF` on((`B`.`id_bulto_definicion` = `BDEF`.`id_bulto_definicion`))) left join `contenedores` `C` on((`B`.`contenedor` = `C`.`id_contenedor`))) left join `contenedores_definiciones` `CDEF` on((`C`.`id_contenedor_definicion` = `CDEF`.`id_contenedor_definicion`))) left join `ubicaciones` `U` on((`C`.`ubicacion` = `U`.`id_ubicacion`))) left join `ubicaciones_definiciones` `UDEF` on((`U`.`id_ubicacion_definicion` = `UDEF`.`id_ubicacion_definicion`))) left join `tipo_stock` `TS` on((`P`.`id_tipo_stock` = `TS`.`id_tipo_stock`))) order by `P`.`caducidad`
任何人都可以给我任何线索吗?
答案 0 :(得分:-1)
固定!
改变了这个:
UPDATE `view_alm` SET `cantidad_de_producto`='3' WHERE `id_producto`='43' LIMIT 1;
有:
UPDATE `productos` SET `cantidad_de_producto`='3' WHERE `id_producto`='43' LIMIT 1;
字段“cantidad_de_producto”和“id_producto”来自表“productos”。在这种情况下,解决方案是修改表“productos”而不是“view_alm”的数据。