Mysql

我可以使用 mysql 視圖來更新和刪除 mysql 中的記錄嗎

  • August 16, 2016

我可以根據某些條件創建用於檢索記錄的視圖,但該視圖是否僅支持檢索記錄,還是支持刪除和更新表中的記錄。

create view onlinetestview as
   select * from onlinetest where experience = '1-2 Years'

我使用上面的視圖它工作正常但是當我試圖創建一個用於更新表記錄的視圖時它給了我一個錯誤:

create view onlinetestview2 as
   update  onlinetest set experience='1-2Years' where experience='1-2 Years';

**錯誤是:**查找錯誤 - MySQL 數據庫錯誤:您的 SQL 語法有錯誤;檢查與您的 MySQL 伺服器版本相對應的手冊,以在第 1 行的 ‘update onlinetest set experience=‘1-2Years’ where experience=‘1-2 Years’’ 附近使用正確的語法

語法錯誤(注意它指向“更新”)是 aVIEW只能是 a SELECT,而不是 a UPDATE

在 a 上創建視圖後SELECT,您可以將VIEW(your onlinetestview) 視為表格(有一些注意事項)。所以……這可能有效:

update  onlinetestview           -- Note: this is the VIEW name
   set   experience='1-2Years'
   where experience='1-2 Years';

是的,但有一些警告。您的觀點的某些方面可能會破壞以下一個或多個條件:

http://dev.mysql.com/doc/refman/5.7/en/view-updatability.html

要使視圖可更新,視圖中的行與基礎表中的行之間必須存在一對一的關係。還有某些其他構造使視圖不可更新。更具體地說,如果視圖包含以下任何內容,則它是不可更新的:

  • 聚合函式(SUM()、MIN()、MAX()、COUNT() 等)
  • 清楚的
  • 通過…分組
  • 擁有
  • UNION 或 UNION ALL
  • 選擇列表中的子查詢(INSERT 失敗,UPDATE、DELETE 正常)
  • 某些聯接(請參閱本節後面的附加聯接討論)
  • 在 FROM 子句中引用不可更新的視圖
  • WHERE 子句中的子查詢引用 FROM 子句中的表
  • 僅指文字值(在這種情況下,沒有要更新的基礎表)
  • ALGORITHM = TEMPTABLE(使用臨時表總是使視圖不可更新)
  • 對基表任何列的多次引用(INSERT 失敗,UPDATE、DELETE 正常)

如果您發布視圖定義,我們可能會告訴您是哪一個

引用自:https://dba.stackexchange.com/questions/146944