MySQL - ALTER VIEW 语句
MySQL ALTER VIEW 语句
MySQL 视图是以预定义 SQL 查询形式组成的表。它以关联的名称存储在数据库中。
您可以使用 ALTER VIEW 语句更改现有视图的定义
语法
以下是 ALTER VIEW 语句的语法 -
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
示例
假设我们使用如下所示的 CREATE 语句创建了一个名为 dispatches_data 的表 -
CREATE TABLE dispatches_data( ProductName VARCHAR(255), CustName VARCHAR(255), DispatchTimeStamp timestamp, Price INT, Location VARCHAR(255) );
现在,让我们在 dispatches_data 表中插入一些记录 -
Insert into dispatches_data values ('Key-Board','Raja',TIMESTAMP('2019-05-04','15:02:45'),7000,'Hyderabad'), ('Earphones','Roja',TIMESTAMP('2019-06-26','14:13:12'),2000, 'Vishakhapatnam'), ('Mouse','Puja',TIMESTAMP('2019-12-07','07:50:37'), 3000,'Vijayawada'), ('Mobile','Vanaja',TIMESTAMP ('2018-03-21','16:00:45'),9000,'Chennai'), ('Headset','Jalaja',TIMESTAMP('2018-12-30','10:49:27'),6000,'Goa')
我们使用 CREATE VIEW 语句创建一个视图,如下所示 -
CREATE VIEW testView AS SELECT * FROM dispatches_data;
您可以使用 SHOW CREATE VIEW 语句检索上述创建的视图的定义,如下所示 -
SHOW CREATE VIEW testView;
输出
上述查询产生以下输出 -
*************** 1. row *************** View: testview Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `testview` AS select `dispatches_data`.`ProductName` AS `ProductName`, `dispatches_data`.`CustName` AS `CustName`, `dispatches_data`.`DispatchTimeStamp` AS `DispatchTimeStamp`,`dispatches_data`.`Price` AS `Price`,`dispatches_data`.`Location` AS `Location` from `dispatches_data` character_set_client: cp850 collation_connection: cp850_general_ci
以下查询会修改表的算法 -
ALTER ALGORITHM=MERGE VIEW testView AS SELECT * FROM dispatches_data;
验证
如果在修改表后检索上述创建的视图的定义,您可以观察到算法的名称 -
SHOW CREATE VIEW testView;
查询执行后,将生成以下输出 -
*************** 1. row *************** View: testview Create View: CREATE ALGORITHM=MERGE DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `testview` AS select `dispatches_data`.`ProductName` AS `ProductName`, `dispatches_data`.`CustName` AS `CustName`, `dispatches_data`.`DispatchTimeStamp` AS `DispatchTimeStamp`,`dispatches_data`.`Price` AS `Price`,`dispatches_data`.`Location` AS `Location` from `dispatches_data` character_set_client: cp850 collation_connection: cp850_general_ci
根据列更改现有视图
如果创建的视图包含表的所有(或某些)列,则可以使用 ALTER VIEW 语句更改视图中使用的列。
语法
ALTER VIEW view_name column_list AS select_statement;
示例
如果使用 SELECT 语句检索上述创建的视图的内容,如下所示 -
SELECT * FROM testView;
输出
以下是上述查询的输出 -
ProductName | CustName | DispatchTimeStamp | Price | Location |
---|---|---|---|---|
Key-Board | Raja | 2019-05-04 15:02:45 | 7000 | Hyderabad |
Earphones | Roja | 2019-06-26 14:13:12 | 2000 | Vishakhapatnam |
Mouse | Puja | 2019-12-07 07:50:37 | 3000 | Vijayawada |
Mobile | Vanaja | 2018-03-21 16:00:45 | 9000 | Chennai |
Headset | Jalaja | 2018-12-30 10:49:27 | 6000 | Goa |
以下查询会修改现有视图的列 -
ALTER VIEW testView (ProductName, Price, Location) AS SELECT ProductName, Price, Location FROM dispatches_data;
验证
您可以验证修改后的视图内容,如下所示 -
SELECT * FROM testView;
执行上述查询后,将生成以下输出 -
ProductName | Price | Location |
---|---|---|
Key-Board | 7000 | Hyderabad |
Earphones | 2000 | Vishakhapatnam |
Mouse | 3000 | Vijayawada |
Mobile | 9000 | Chennai |
Headset | 6000 | Goa |