SQL DROP或DELETE视图
SQL允许您删除数据库中的现有视图并从视图中删除记录。SQL使用DROP语句来删除视图的所有记录以及其定义。使用DELETE语句,仅删除记录,而视图的定义保持不变。
请注意,如果从视图中删除记录,则该记录也将从对应的基表中删除。
DROP VIEW语句
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 (ID,NAME,AGE,ADDRESS,SALARY) 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 |
---|---|
tutorials | CUSTOMERS_VIEW1 |
tutorials | CUSTOMERS_VIEW2 |
tutorials | 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 |
---|---|
tutorials | 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'
但如果您使用与以下DROP VIEW语句一起使用的IF EXISTS子句,指定的视图将被删除;如果不存在具有给定名称的视图,则查询将被忽略。
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;
客户表显示如下-
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 35 | 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 |
7 | Muffy | 24 | Indore | 10000.00 |