7.4 修改视图

修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化的时候,可以通过修改视图来保持与基本表的一致性。在MySQL中,通过CREATE OR REPLACE VIEW语句和ALTER语句来修改视图。

7.4.1 用CREATE OR REPLACE VIEW语句修改视图

在MySQL中如果要修改视图,可以使用CREATE OR REPLACE VIEW语句,语法格式如下:

  CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
     VIEW view_name [(column_list)]
     AS SELECT_statement
     [WITH [CASCADED | LOCAL] CHECK OPTION]

可以看到,修改视图的语句和创建视图的语句完全一样。当视图存在时,修改语句对视图进行修改;当视图不存在时,创建视图。下面通过一个实例来说明。

【例7.8】修改视图view_t。

代码如下:

  CREATE OR REPLACE VIEW view_t AS SELECT * FROM t;

首先通过DESC查看更改之前的视图,以便与更改之后的视图进行对比,执行的结果如下:

  mysql> DESC view_t;
  +----------------+------------+------+-----+---------+-------+
  | Field          | Type       | Null | Key | Default | Extra |
  +----------------+------------+------+-----+---------+-------+
  | quantity       | int(11)    | YES  |     | NULL    |       |
  | price          | int(11)    | YES  |     | NULL    |       |
  | quantity*price | bigint(21) | YES  |     | NULL    |       |
  +----------------+------------+------+-----+---------+-------+
  3 rows in set (0.00 sec)
  
  mysql> CREATE OR REPLACE VIEW view_t AS SELECT * FROM t;
  Query OK, 0 rows affected (0.05 sec)
  
  mysql> DESC view_t;
  +----------+---------+------+-----+---------+-------+
  | Field    | Type    | Null | Key | Default | Extra |
  +----------+---------+------+-----+---------+-------+
  | quantity | int(11) | YES  |     | NULL    |       |
  | price    | int(11) | YES  |     | NULL    |       |
  +----------+---------+------+-----+---------+-------+
  2 rows in set (0.00 sec)

从执行的结果来看,相比原来的视图view_t,新的视图view_t少了1个字段。

7.4.2 用ALTER语句修改视图

用ALTER语句修改视图的语法格式如下:

  ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
     VIEW view_name [(column_list)]
     AS SELECT_statement
     [WITH [CASCADED | LOCAL] CHECK OPTION]

这个语法中的关键字和前面介绍的关键字是一样的,这里就不再介绍。

【例7.9】使用ALTER语句修改视图view_t。

代码如下:

  ALTER VIEW view_t AS SELECT quantity FROM t;

执行结果如下:

  mysql> DESC view_t;
  +----------+---------+------+-----+---------+-------+
  | Field    | Type    | Null | Key | Default | Extra |
  +----------+---------+------+-----+---------+-------+
  | quantity | int(11) | YES  |     | NULL    |       |
  | price    | int(11) | YES  |     | NULL    |       |
  +----------+---------+------+-----+---------+-------+
  2 rows in set (0.06 sec)
  
  mysql> ALTER VIEW view_t AS SELECT quantity FROM t;
  Query OK, 0 rows affected (0.05 sec)
  
  mysql> DESC view_t;
  +----------+---------+------+-----+---------+-------+
  | Field    | Type    | Null | Key | Default | Extra |
  +----------+---------+------+-----+---------+-------+
  | quantity | int(11) | YES  |     | NULL    |       |
  +----------+---------+------+-----+---------+-------+
  3 rows in set (0.01 sec)

通过ALTER语句同样可以达到修改视图view_t的目的,从上面的执行结果来看,视图view_t中只剩下1个quantity字段,修改成功。