2017-02-15 11 views
0

Этот запрос не будет работать на MySQL 5.7MySQL: Обновление вид терпит неудачу на MySQL 5.7, но работает на 5.6

UPDATE `view_alm` SET `cantidad_de_producto`='3' WHERE `id_producto`='43' LIMIT 1; 

Тот же запрос работает на MySQL 5.5 и 5.6. Важно подчеркнуть, что «view_alm» - это таблица представлений.

Результатом запроса на MySQL 5.7 является «Ошибка: целевая таблица view_alm из UPDATE не обновляется».

Я прочитал раздел под названием «обновляемые и Insertable просмотров» по ​​документации MySQL: documentation

Я также проверить некоторые параметры на два моих окружающих средах тестирования (одна окружающей средой является MySQL 5.7, а другой MySQL 5.5).

  • Запрос "SHOW VARIABLES;" return в обоих случаях «updatable_views_with_limit | YES».
  • В «INFORMATION_SCHEMA.VIEWS» флаг «IS_UPDATABLE» установлен в «YES» в обоих случаях.

Это мнение:

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

Поскольку вы прочитали документацию, вы, возможно, прочитали, что этот флаг может быть ненадежным в зависимости от фактического кода представления. Поэтому вам нужно будет добавить фактический код просмотра. Также: делает ли только выбор из вашего представления правильную строку, которую вы хотите обновить? – Solarflare

+0

Я только что обновил вопрос с кодом представления. – didaquis

+0

Дополнительная информация: этот запрос отлично работает «SELECT * FROM' view_alm »WHERE' id_producto' = '43 'LIMIT 1; " – didaquis

ответ

0

Исправлено!

Изменено это:

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».