MySQL:在MySQL 5.7上更新视图失败但在5.6上工作

时间:2017-02-15 12:05:59

标签: mysql mysql-5.7

此查询在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)。

  • 查询" SHOW VARIABLES;"在两种情况下返回" updatable_views_with_limit | YES"
  • On" INFORMATION_SCHEMA.VIEWS"旗帜" IS_UPDATABLE"被设置为"是"在这两种情况下。

这是观点:

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`

任何人都可以给我任何线索吗?

1 个答案:

答案 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”的数据。

相关问题