2015-06-04 56 views
0

我工作了很多w。 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
從文檔 18.4.3 Updatable and Insertable Views

直:

對於插入性(即更新與INSERT 語句),可更新視圖是可插入的,如果它也滿足 視圖列的這些附加要求:

必須不存在重複查看列名稱。

該視圖必須包含基表中沒有 默認值的所有列。

視圖列必須是簡單的列引用。他們絕不能 表達式或複合表達式

此外,您不能修改多個表的join'd視圖,所以你基本上是運氣了這種方法。

假設可以使用MERGE算法處理多表視圖,有時可以更新多表視圖 。爲使此 正常工作,視圖必須使用內部聯接(不是外部聯接或聯合)。此外,只有在視圖定義一個表可以 更新

+0

哇,這真是不幸,但很明顯,正確的答案。謝謝。 – ChrisNY