MySQL-无法更新 View ,即使它显示为可更新

标签 mysql view sql-update

我创建了一个 View ,它INNER JOINS 一堆表,但在 MySQL 规则下似乎仍然有资格更新,但更新数据似乎不起作用。这是 WorkBench 中显示的 View :

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 ),可以检查他们的 View 是否可更新,使用

SELECT 
    table_name, 
    is_updatable
FROM
    information_schema.views

查询的输出表明我的 View 是可更新的(is_updatable = YES)

出于某种原因,一个简单的更新如下:

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

产生 错误代码:1288。UPDATE 的目标表事件注册者不可更新

最佳答案

对于任何可更新的 View ,引擎应该能够将每个结果行与主/核心表的单个基行匹配。

大多数数据库引擎都是如此,而不仅仅是 MySQL。请务必注意,每个数据库引擎都对可更新 View 提出了类似/额外的要求。

在您的特定情况下,您正在使用 INNER JOIN,这 [很可能] 会导致与每个基行相关的多个结果行。即使 MySQL 已将其标记为可更新,它也可能无法执行此操作。

关于MySQL-无法更新 View ,即使它显示为可更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54318526/

相关文章:

mysql - 显示每个员工的不同记录

mysql - 在触发器中获取更新的字段名称和值

ios - 仅更改 View 框架中的 1 个值

php - Laravel 5.1 更新查询不改变值

sql-server - 如何从 ASP.NET Core Entity Framework 中的数据库更新 VS 2019 中的模型

php - 将本地站点带到实时站点 url 不起作用

mysql 查询连接三个表

xamarin - 如何在 Xamarin.Forms RelativeLayout 中水平居中 View ?

ios - 我如何在ios中从一个nib文件的两个 View 链接

带有自动插入的 SQL 更新