代码之家  ›  专栏  ›  技术社区  ›  machump

MySQL无法更新视图,即使它显示为可更新

  •  1
  • machump  · 技术社区  · 7 年前

    我创建了一个视图 INNER JOINS

    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 回复  |  直到 7 年前
        1
  •  3
  •   The Impaler    7 年前

    对于任何可更新的视图,引擎应该能够将每个结果行与

    INNER JOIN