SQL - 刪除或刪除檢視



SQL 允許您刪除資料庫中現有的檢視並刪除檢視中的記錄。SQL 使用 DROP 語句刪除檢視中的所有記錄以及其定義,而使用 DELETE 語句僅刪除記錄,而檢視的定義保持不變。

請注意,如果從檢視中刪除了記錄,它也會從其對應的基表中刪除。

DROP VIEW 語句

SQL 的 **DROP VIEW** 語句用於刪除現有的檢視及其定義和其他資訊。刪除檢視後,其所有許可權也將被刪除。我們還可以使用此語句刪除索引檢視。

假設使用 DROP TABLE 命令刪除了一個表,並且它與一個檢視相關聯,則必須使用 DROP VIEW 命令顯式刪除此檢視。

  • 在嘗試執行查詢時,資料庫引擎會檢查該語句中引用的所有物件是否有效且存在。因此,如果資料庫中不存在檢視,則 DROP VIEW 語句將引發錯誤。

  • 要刪除資料庫中的表,必須對該表具有 ALTER 許可權,並對錶架構具有 CONTROL 許可權。

語法

此 DROP VIEW 語句的基本語法如下所示:

DROP VIEW view_name;

示例

假設我們使用以下查詢使用 **CREATE TABLE** 語句建立了一個名為 CUSTOMERS 的表:

CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

現在,使用 INSERT 語句將值插入此表,如下所示:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

假設我們使用 CREATE VIEW 語句建立了 3 個檢視,如下所示:

CREATE VIEW CUSTOMERS_VIEW1 AS SELECT * FROM CUSTOMERS;
CREATE VIEW CUSTOMERS_VIEW2 AS SELECT * FROM CUSTOMERS;
CREATE VIEW CUSTOMERS_VIEW3 AS SELECT * FROM CUSTOMERS;

您可以使用以下查詢驗證所有檢視的列表:

SELECT TABLE_SCHEMA, TABLE_NAME 
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA='tutorials';

這將顯示以下檢視列表:

TABLE_SCHEMA TABLE_NAME
教程 CUSTOMERS_VIEW1
教程 CUSTOMERS_VIEW2
教程 CUSTOMERS_VIEW3

現在,讓我們使用 DROP VIEW 語句從上面建立的檢視中刪除兩個檢視。

DROP VIEW CUSTOMERS_VIEW1;
DROP VIEW CUSTOMERS_VIEW2;

驗證

刪除所有檢視後,如果您嘗試檢索檢視列表,您將獲得一個空集,如下所示:

SELECT TABLE_SCHEMA, TABLE_NAME 
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA='tutorials';

剩餘的檢視列表如下:

TABLE_SCHEMA TABLE_NAME
教程 CUSTOMERS_VIEW3

IF EXISTS 子句

在刪除現有檢視時,您可以在 DROP VIEW 語句中使用 IF EXISTS 子句。此子句在 DROP VIEW 查詢中指定時,將自動檢查檢視是否存在於當前資料庫中,如果存在則刪除它。如果資料庫中不存在檢視,則將忽略該查詢。

語法

以下是 DROP VIEW IF EXISTS 的基本語法:

DROP VIEW [IF EXISTS] view_name;

示例

如果您嘗試刪除資料庫中不存在的檢視,而不使用 IF EXISTS 子句,如下所示:

DROP VIEW DEMO_VIEW;

將生成錯誤:

ERROR 1051 (42S02): Unknown table 'tutorials.demo_view'

但是,如果您將 IF EXISTS 子句與 DROP VIEW 語句一起使用,如下所示,則將刪除指定的事件;如果不存在具有給定名稱的檢視,則將忽略該查詢。

DROP VIEW IF EXISTS DEMO_VIEW;

查詢將被忽略,並顯示以下輸出:

Query OK, 0 rows affected, 1 warning (0.04 sec)

從檢視中刪除行

除了刪除整個檢視外,我們還可以使用 DELETE 語句刪除檢視的選定行。

語法

以下是 DELETE 語句的語法:

DELETE FROM view_name WHERE condition;

示例

以下查詢從上面建立的 CUSTOMERS 表上建立的 third_view 中刪除一條記錄。對檢視中的資料所做的更改最終將反映在基表 CUSTOMERS 中。

DELETE FROM CUSTOMERS_VIEW3 WHERE AGE = 22;

這最終將從基表 CUSTOMERS 中刪除一行,並且同樣會反映在檢視本身中。現在,查詢基表,SELECT 語句將產生以下結果:

SELECT * FROM CUSTOMERS;

CUSTOMERS 表顯示為:

ID 姓名 年齡 地址 薪資
1 拉梅什 35 艾哈邁達巴德 2000.00
2 希蘭 25 德里 1500.00
3 考希克 23 科塔 2000.00
4 查伊塔利 25 孟買 6500.00
5 哈迪克 27 博帕爾 8500.00
7 馬菲 24 因多爾 10000.00
廣告