一.视图
一个视图是从特定角度来查看数据库中的数据。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表,即视图是由一张或多张表中的数据组成的。视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。
二.视图的语法
mysql在处理视图时有两种算法,分别为 merge 和 temptable, 可以指定使用哪种算法。 merge是指在处理涉及到视图的操作时,将对视图额操作根据视图的定义进行展开,优点类似于C语言中的宏展开。
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
该语句能创建新的视图,如果给定了OR REPLACE子句,该语句还能替换已有的视图。 select_statement 是一种SELECT语句,它给定了视图的定义。该语句可从基表或其他视图进行选择。该语句要求具有针对视图的 CREATE VIEW 权限,以及针对有SELECT语句选择的每列上的某些权限。对于在 SELECT语句中其他地方使用的列,必须具有select权限。如果还有 OR REPLACE 子句,必须在视图上具有DROP权限。
视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确的创建视图,创建时,应将名称指定为 db_name.view_name
表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。
视图必须具有唯一的列名。
修改视图语句:
ALTER
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION
删除视图语句:
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]
查看视图语句:
show create view view_name
三.视图的使用
现在假设有一个产品表(product)和一个购买记录表(purchase),定义如下:
create table product(
product_id int not null,
name varchar(50) not null,
price double not null
);
insert into product values(1,'apple',5.5);
create table purchase(
id int not null,
product_id int not null,
qty int not null default 0,
gen_tim datetime not null
);
insert into purchase values(1,1,10,now());
创建视图purchase_detail,用于查询购买的详细信息:
create view purchase_detail
as select
product.name as name,
product.price as price,
purchase.qty as qty,
product.price *
purchase.qty as total_value
from product,purchase
where product.product_id=purchase.product_id;
创建成功后,输入
select * from purchase_detail;
运行结果如下: