整理视图相关语法和样例,方便后续使用;
认识视图:
1、视图是一个虚拟表,其内容由查询定义。
2、视图是从一个、多个表或者视图中导出的表,包含一系列带有名称的数据列和若干条数据行。
3、视图具有如下优点:
- 定制用户数据,聚焦特定的数据
- 简化数据操作
- 提高基表数据的安全性
- 共享所需数据
- 更改数据格式
- 重用 SQL 语句
4、要区别视图和数据表的本质,即视图是基于真实表的一张虚拟的表,其数据来源均建立在真实表的基础上。
【创建视图】
语法格式:
CREATE VIEW <视图名> AS <SELECT语句>
语法说明:
- <视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
- <SELECT语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。
验证样例:
-- 1、查询user表数据
SELECT * from user;
-- 2、创建视图view_user_info
-- 无法使用 IF NOT EXISTS关键词
CREATE VIEW view_user_info as SELECT * from user;
-- 3、查询视图view_user_info
select * from view_user_info
-- 4、创建视图view_user_info2
create view view_user_info2(id, u_name, u_city, u_area, u_score, u_datetime)
as select id, username, city, area, score, datetime from user;
select * from view_user_info2;
-- 5、基于多表创建视图
CREATE view view_order_user(order_id, u_id, u_name, order_title, order_price)
as SELECT tb_order.id, user.id, user.username, tb_order.title, tb_order.price
from tb_order, user
where tb_order.user_id = user.id;
SELECT * from view_order_user;
【查看视图】
-- 查看指定视图结构;
describe view_order_user;
-- 查看创建视图信息
SHOW CREATE VIEW view_user_info2;
-- 7、查看所有视图列表
SHOW FULL TABLES WHERE Table_type = 'VIEW';
【修改视图】
语法格式:
ALTER VIEW <视图名> AS <SELECT语句>
语法说明:
- <视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
- <SELECT 语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。
修改视图内容:
- 视图是一个虚拟表,实际的数据来自于基本表,所以通过插入、修改和删除操作更新视图中的数据,实质上是在更新视图所引用的基本表的数据。
- 对视图的修改就是对基本表的修改,因此在修改时,要满足基本表的数据定义。
- 对于可更新的视图,视图中的行和基本表的行之间必须具有一对一的关系。
-- 8、修改视图view_user_info
-- SELECT * from view_user_info;
-- 需求:只保留id, username, city, area 四列数据;
ALTER view view_user_info
as SELECT id, username, city, area from user;
SELECT * from view_user_info;
-- 通过update修改view_user_info数据
update view_user_info set area='大理' where id=1; #修改真实表中id=1 area字段值;
-- 修改视图字段与实际表字段一致情况
describe view_user_info2;
update view_user_info2 set u_city='福建' where id=1; #修改成功,
-- 修改通过count统计的字段值
create view view_user_count(u_count) as select count(*) from user;
select * from view_user_count;
-- 聚合函数 SUM()、MIN()、MAX()、COUNT()等值不能进行修改;
# update view_user_count set u_count = 10; #修改失败
#1288 - The target table view_user_count of the UPDATE is not updatable
-- 通过delte删除view_user_info数据
DELETE from view_user_info where id=7; #删除真实表数据
【删除视图】
语法格式:
DROP VIEW <视图名1> [ , <视图名2> …]
其中: <视图名> 指定要删除的视图名。DROP VIEW 语句可以一次删除多个视图,但是必须在每个视图上拥有 DROP 权限。
DROP VIEW IF EXISTS view_user_info;
参考文档:http://www.voidme.com/mysql/mysql-drop-view