MySQL не может обновить представление, даже если оно отображается как обновляемое - PullRequest
0 голосов
/ 23 января 2019

Я создал представление, что INNER JOINS группа таблиц, но которые, по-видимому, все еще могут быть обновляемыми в соответствии с правилами MySQL, но обновление данных, похоже, не работает.Вот представление, как показано в WorkBench:

CREATE 
    ALGORITHM = UNDEFINED 
VIEW `event_registrants` AS
    SELECT 
        `event_details`.`DTT_EVT_start` AS `Event_Start`,
        `attendee_meta`.`ATT_email` AS `ATT_email`,
        `users`.`ID` AS `ID`,
        `user_detail_tbl`.`first_name` AS `first_name`,
        `user_detail_tbl`.`nickname` AS `nickname`,
        `user_detail_tbl`.`last_name` AS `last_name`,
        `registration`.`EVT_ID` AS `EVT_ID`,
        `posts`.`post_title` AS `post_title`,
        `misc_tbl`.`ANS_value` AS `ANS_value`
    FROM
        ((((((`misc_tbl`
        JOIN `registration` ON ((`misc_tbl`.`REG_ID` = `registration`.`REG_ID`)))
        JOIN `event_details` ON ((`registration`.`EVT_ID` = `event_details`.`EVT_ID`)))
        JOIN `posts` ON ((`posts`.`ID` = `registration`.`EVT_ID`)))
        JOIN `attendee_meta` ON ((`registration`.`ATT_ID` = `attendee_meta`.`ATT_ID`)))
        JOIN `users` ON ((`attendee_meta`.`ATT_email` = `users`.`user_email`)))
        JOIN `user_detail_tbl` ON ((`users`.`ID` = `user_detail_tbl`.`user_id`)))

Согласно mysqltutorial.org (http://www.mysqltutorial.org/create-sql-updatable-views.aspx), можно проверить, обновляются ли их представления, используя

SELECT 
    table_name, 
    is_updatable
FROM
    information_schema.views

Выходные данныеиз запроса указывает, что мое представление является обновляемым (is_updatable = YES)

По некоторым причинам простое обновление, например:

UPDATE event_registrants
SET nickname='Terminator'
WHERE first_name='John';

дает Error Code: 1288. The target table event registrants of the UPDATE is not updatable.

1 Ответ

0 голосов
/ 23 января 2019

Для любого обновляемого представления механизм должен иметь возможность сопоставлять каждую результирующую строку с единственной базовой строкой основной / основной таблицы.

Это верно для большинства механизмов баз данных., а не только MySQL.Важно отметить, что каждый механизм базы данных предъявляет аналогичные / дополнительные требования для обновляемых представлений.

В вашем конкретном случае вы используете INNER JOIN s, что [наиболее вероятно] приведет к множеству результирующих строк, связанных с каждой базойстрока.Даже если MySQL пометил его как обновляемый, он не сможет это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...