我创建了一个视图,其中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
。
答案 0 :(得分:3)
对于任何可更新的视图,引擎都应该能够将每个结果行与主/核心表的单个基础行相匹配。
在大多数数据库引擎上都是如此,而不仅仅是MySQL。重要的是要注意,每个数据库引擎对可更新视图都施加类似/额外的要求。
在您的特定情况下,您使用的INNER JOIN
(最有可能)将导致与每个基本行相关的多个结果行。即使MySQL将其标记为可更新,它也可能无法执行。