<一> 视图
1.优点
视点集中
简化操作
定制数据
合并分割数据
安全性
2.为什么需要视图?
视图是存储在数据库中的查询的sql 语句,它主要出于两种原因:
安全原因,视图可以隐藏一些数据,如社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,
可使复杂的查询易于理解和使用。
3.创建视图的语法
CREATE VIEW view_name
AS
SELECT column_name(s)
FROM table_name
WHERE condition
[注]:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。
4.更新视图的语法
CREATE OR REPLACE VIEW view_name
AS
SELECT column_name(s)
FROM table_name
WHERE condition
5.删除视图的语法
DROP VIEW view_name
<二>例子
1.创建两张表,并插入数据
product 表
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);
purchase 表
create table purchase
(
id int not null,
product_id int not null,
qty int not null default 0,
gen_time datetime not null
);
insert into purchase values(1, 1, 10, now());
2.创建视图:
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;
3.创建视图后,查询:
select * from purchase_detail;
4.结果:
<三>.创建视图的注意事项
注意事项
运行创建视图的语句需要用户具有创建视图(crate view)的权限,若加了[or replace]时,还需要用户具有删除视图(drop view)的权限;
select语句不能包含from子句中的子查询;
select语句不能引用系统或用户变量;
select语句不能引用预处理语句参数;
在存储子程序内,定义不能引用子程序参数或局部变量;
在定义中引用的表或视图必须存在。但是,创建了MySQL视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用check table语句;
在定义中不能引用temporary表,不能创建temporary视图;
在视图定义中命名的表必须已存在;
不能将触发程序与视图关联在一起;
在视图定义中允许使用order by,但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略。
<四>.修改视图
使用 alter view
alter view purchase_detail
as
select
product.name as name,
product.price as price,
product.price * purchase.qty as total_value
from
product, purchase
where
product.product_id = purchase.product_id;
参考:http://database.51cto.com/art/201005/200526.htm