【发布时间】:2014-02-02 18:26:42
【问题描述】:
我使用工作台创建了一个 MySQL Schema db1002。它有一个表:id (key, AI) 和 Name (char45)。以及以下观点:
CREATE ALGORITHM = MERGE DEFINER = `xxxx`@`%` SQL SECURITY DEFINER VIEW `new_view` AS
select `candidates`.`id` AS `id`, `candidates`.`name` AS `name`
from `candidates`
根据 mysql 文档,这个视图应该是可更新的。这意味着,在工作台中我查询视图(从 db1002.new_view 中选择 *)。 它显示 1 条记录 = 所有记录。 但是,我无法更新或插入任何记录。通常我可以单击结果列表中的一个字段并更改它。我不能。新的记录行(带 *)也丢失了。 如果我使用 MSACCESS 通过 ODBC 连接到它,我也不会更新表。 在 information_schema 中列出了视图 is_updatable = yes。
顺便说一句,我可以毫无问题地更新基础表候选者。
这里有什么问题?
感谢所有帮助我的人。
更新:我测试了其他东西:如果我在视图上使用“更新new_view set name is pete”,它可以工作。但是,如果我使用工作台,我无法通过直接输入记录来更新。例如。如果如果使用“select * from Candidates”(即表格),那么我可以通过直接在结果列表中输入来更新,我也可以添加一条新记录。通过“select * from new_view”尝试相同的操作,但我不能。
另外,我使用 MS Access 作为前端。如果我访问候选表,我可以更新和添加记录。如果我改为访问 new_view,则不能。
所以基本上,视图是可更新的,但只能通过更新命令而不是通过通常的方法。这在 MS Access 中是一个大问题。
【问题讨论】:
-
我的猜测是指定的用户没有表的更新权限。
-
用户可以更新表格
-
不相关但:你肯定不想要
char(45)。该数据类型总是用空格填充到定义的长度。我很确定您希望varchar(45)用于名为name的列
标签: mysql ms-access view mysql-workbench insert-update