mac*_*ump 1 mysql view sql-update
我创建了一个视图,其中包含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`)))
Run Code Online (Sandbox Code Playgroud)
根据 mysqltutorial.org ( http://www.mysqltutorial.org/create-sql-updatable-views.aspx ),可以使用以下命令检查其视图是否可更新
SELECT
table_name,
is_updatable
FROM
information_schema.views
Run Code Online (Sandbox Code Playgroud)
查询的输出表明我的视图是可更新的 ( is_updatable = YES
)
由于某种原因,简单的更新如下:
UPDATE event_registrants
SET nickname='Terminator'
WHERE first_name='John';
Run Code Online (Sandbox Code Playgroud)
产量Error Code: 1288. The target table event registrants of the UPDATE is not updatable
.
对于任何可更新的视图,引擎应该能够将每个结果行与主/核心表的单个基行进行匹配。
这在大多数数据库引擎上都是如此,而不仅仅是 MySQL。值得注意的是,每个数据库引擎对可更新视图都有类似/额外的要求。
在您的特定情况下,您使用的INNER JOIN
s [最有可能]会导致与每个基行相关的多个结果行。即使MySQL已经将其标记为可更新,它也可能无法做到。
归档时间: |
|
查看次数: |
1384 次 |
最近记录: |