我创建了一个 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/