我做了很多MySQL的工作,但没有用视图。我想做的在概念上很简单。有两个表,创建一个组合它们的视图,并将/update/delete像表一样插入到视图中。类似于:
示例:
CREATE TABLE IF NOT EXISTS `baseuser` (
`id` int(11) NOT NULL,
`uname` varchar(55) NOT NULL,
`pwd` varchar(55) NOT NULL
) ENGINE=InnoDB ;
CREATE TABLE IF NOT EXISTS `facultydet` (
`id` int(11) NOT NULL,
`baseuser_id` int(11) NOT NULL,
`department` varchar(55) DEFAULT NULL
) ENGINE=InnoDB;
CREATE ALGORITHM = MERGE
VIEW `facultyuser`
AS SELECT `baseuser`.`id` AS `id`, `uname`, `pwd`, `department`
FROM `baseuser`, `facultydet`
WHERE `facultydet`.`baseuser_id` = `baseuser`.`id`;上面创建的视图“facultyuser”,我可以更新,但我不能插入或删除从‘学院用户’视图。有什么方法可以直接用这样的视图来完成吗?我尝试过视图和表防御的不同变体,查看mysql文档,但显然我遗漏了一些东西。任何建议都很感激。
谢谢,
克里斯
发布于 2015-06-04 23:32:45
直接从docs 18.4.3可更新和不可更改的视图
关于可插入性(可以用INSERT语句更新),如果可更新视图满足视图列的这些额外要求,则可插入视图: 不能有重复的视图列名。 视图必须包含基表中没有默认值的所有列。 视图列必须是简单的列引用。它们不能是表达式或复合表达式。
此外,在join'd视图中不能修改多个表,因此从本质上说,这种方法是行不通的。
有时,假设可以使用合并算法处理多表视图,则可以对其进行更新。为此,视图必须使用内部连接(而不是外部连接或联合)。此外,只能更新视图定义中的单个表。
https://stackoverflow.com/questions/30655868
复制相似问题