视图和表的唯一区别在于是否保存了实际的数据。使用视图时并不会将数据保存到存储设备之中,而且也不会将数据保存到其他任何地方。视图仅仅保存的是select语句。
视图会在内部执行该select语句,并创建出一张临时表。
视图的优点:1.视图由于不用保存数据,因此可以节省存储设备的容量。
2.可以将频繁使用的select语句保存成视图,就不用每次书写了。
创建好视图后,只需在select语句中进行调用,就可以得到结果。
而且,视图中的数据会随原表的变化自动更新。
可以使用:
create view
来创建视图。
例:
create view ProductSum(product_type, cnt_product)
as
select product_type, count(*)
from Product
group by product_type;
在as后面接入select语句。
创建好的视图可以直接使用:
select product_type, cnt_product
from Productsum;
结果:
还可以以原有的视图为基础,创建视图叫多重视图:
create view ProductSumJim (product_type, cnt_product)
as
select product_type, cnt_product
from ProductSum
where product_type = '办公用品';
select product_type, cnt_product
from ProductSumJim;
结果:
视图的限制:1.定义视图时不能使用order by子句。视图和表是一样的,数据行都是没有顺序的。
2.对视图进行更新。当视图满足以下条件时,才可被更新:
1.select子句中未使用distinct
2.from子句中只有一张表
3.未使用group by子句
4.未使用having子句
如果视图发生了改变,而原表没有进行相应的更新的话,就无法保证数据的一致性了。
可以更新的视图:将所有项与原表一一对应,且没有使用聚合语句。
create view ProductJim (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
as
select *
from Product
where product_type = '办公用品';
添加行:
insert into ProductJim values ('0009', '印章', '办公用品', 95, 10, '2009-11-30');
结果:
同样的,原表也会添加这一行:
删除视图:使用drop view语句删除视图
drop view ProductSum;