插入两个表的视图?

时间:2015-06-04 23:25:56

标签: mysql views

我工作了很多次。 MySQL,但没有视图。我想做的事情在概念上很简单。有两个表,创建一个组合它们的视图,并像表一样插入/更新/删除视图。类似的东西:

示例:

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,但是我无法在' facultyuser'中插入或删除。视图。有没有办法直接用这样的视图做到这一点?我在VIEW和TABLE defs上尝试了不同的变体,查看了mysql文档,但显然我错过了一些东西。任何建议表示赞赏。

谢谢,

克里斯

1 个答案:

答案 0 :(得分:1)

直接来自文档18.4.3 Updatable and Insertable Views

  

关于可插入性(可用INSERT更新)   如果语句也满足,则可更新视图是可插入的   视图列的这些附加要求:

     

必须没有重复的视图列名称。

     

视图必须包含基表中没有的所有列   默认值。

     

视图列必须是简单的列引用。他们一定不是   表达式或复合表达式

此外,您无法在连接视图中修改多个表,因此您对这种方法基本上没有运气。

  

有时候多表视图可以更新,   假设它可以使用MERGE算法进行处理。为了这   要工作,视图必须使用内连接(不是外连接或   联盟)。此外,视图定义中只能有一个表   更新