视图操作

一.视图

一个视图是从特定角度来查看数据库中的数据。从数据库系统内部来看,一个视图是由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;

运行结果如下:









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值