8.4修改视图
修改视图是指修改数据库中已存在的表的定义。当基本表的某些字段发生改变时,可 以通过修改视图来保持视图和基本表之间一致。MySQL中通过CREATE OR REPLACE VIEW语句和ALTER语句来修改视图。本节将详细讲解修改视图的方式。
8.4.1CREATE OR REPLACE VIEW语句修改视图
在MySQL中,CREATE OR REPLACE VIEW语句可以用来修改视图。该语句的使用非常灵活。在视图已经存在的情况下,对视图进行修改;视图不存在时,可以创建视图。 CREATE OR REPLACE VIEW语句的语法形式如下:
CREATE OR REPLACE [ ALGORITHM = { UNDEFINED | MERGE | TEMPTABLE }]VIEW视图名[(属性清单)]AS SELECT 语句[WITH [CASCADED|LOCAL] CHECK OPTION ];
这里的所有参数都与创建视图的参数是一样的。
【示例8-9】下面是用CREATE OR REPLACE VIEW语句修改视图department_viewl。代码如下:
CREATE OR REPLACE ALGORITHM=TEMPTABLE VIEW department_view1 (department, function, location )AS SELECT d_name, function, address FROM department;
在执行代码之前,先执行DESC语句查看department_view1的结构,以便与修改后进行对比。DESC语句执行结果如下:
mysql> desc department_view1; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | d_id | int(4) | NO | | NULL | | | d_name | varchar(20) | NO | | NULL | | | function | varchar(50) | YES | | NULL | | | address | varchar(50) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 4 rows in set (0.32 sec)
查询结果可以看到,视图department_viewl有4个属性。这4个属性分別为d_id、 d_name、functior和address。执行CREATE OR REPLACE VIEW语句来修改视图。代码执行如下:
CREATE OR REPLACE ALGORITHM=TEMPTABLE VIEW department_view1 (department, function, location )AS SELECT d_name, function, address FROM department;
结果显示,修改成功。执行DESC语句来查看视图的详细信息。代码执行如下:
mysql> desc department_view1; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | department | varchar(20) | NO | | NULL | | | function | varchar(50) | YES | | NULL | | | location | varchar(50) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
结果显示,department_view 1中只有3个属性。这3个属性分别为department、function 和loction。视图修改成功。
技巧:CREATE OR REPLACE VIEW语句不仅可以修改已经存在的视图,也可以创建新的视图。下面会介绍使用ALTER语句修改视图的方法,不过ALTER语句只能修改已经存在的视图。通常情况下,最好选择CREATE OR REPLACE VIEW 语句修改视图。
8.4.2 ALTER语句修改视图
在MySQL中,ALTER语句可以修改表的定义,可以创建索引。不仅如此,ALTER 语句还可以用来修改视图。ALTER语句修改视图的语法格式如下:
ALTER [ ALGORITHM = { UNDEFINED | MERGE | TEMPTABLE }]VIEW 视图名[(属性清单)]AS SELECT 语句}[WITH [ CASCADED | LOCAL ] CHECK OPTION ];
这里的所有参数都跟创建视图的参数是一样的,不再进行赘述。
【示例8-10】下面是用ALTER语句修改视图department_view2。代码如下:
ALTER VIEW department_view2(department,name,sex,location)AS SELECT d_name, worker.name,worker.sex,address FROM department, worker WHERE department.d_id=worker.d_id WITH CHECK OPTION;
在执行代码之前,先执行DESC语句查看department_view2的结构,以便于修改后进行对比。DESC语句执行结果如下:
mysql> desc department_view2; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | name | varchar(20) | NO | | NULL | | | sex | varchar(4) | NO | | NULL | | | location | varchar(50) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 3 rows in set (0.01 sec)
查询结果可以看到,视图department_view2有3个属性。这3个属性分别是“name”、 “function”和“location”。执行ALTER语句来修改视图。代码执行如下:
ALTER VIEW department_view2 (department, name, sex, location ) AS SELECT d_name, worker.name , worker.sex, address FROM department, worker WHERE departmentd_id=worker.d_id WITH CHECK OPTION;
结果显示,修改成功。执行DEC语句来查看视图的详细信息。代码执行如下:
mysql> desc department_view2; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | department | varchar(20) | NO | | NULL | | | name | varchar(20) | NO | | NULL | | | sex | varchar(4) | NO | | NULL | | | location | varchar(50) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)
结果显示,department_view2中只有4个属性。这4个属性分别是department、name、 sex和location。视图修改成功。