测试表:user有id,name,age,sex字段
测试表:goods有id,name,price字段
测试表:ug有id,userid,goodsid字段
视图的作用实在是太强大了,以下是我体验过的好处:
作用一:
提高了重用性,就像一个函数。如果要频繁获取user的name和goods的name。就应该使用以下sql语言。示例:
select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;
但有了视图就不一样了,创建视图other。示例
create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;
创建好视图后,就可以这样获取user的name和goods的name。示例:
select * from other;
以上sql语句,就能获取user的name和goods的name了。
作用二:
对数据库重构,却不影响程序的运行。假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结构如下:
测试表:usera有id,name,age字段
测试表:userb有id,name,sex字段
这时如果php端使用sql语句:select * from user;那就会提示该表不存在,这时该如何解决呢。解决方案:创建视图。以下sql语句创建视图:
create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;
以上假设name都是唯一的。此时php端使用sql语句:select * from user;就不会报错什么的。这就实现了更改数据库结构,不更改脚本程序的功能了。
作用三:
提高了安全性能。可以对不同的用户,设定不同的视图。例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。示例如下:
create view other as select a.name, a.age from user as a;
这样的话,使用sql语句:select * from other; 最多就只能获取name和age的数据,其他的数据就获取不了了。
作用四:
让数据更加清晰。想要什么样的数据,就创建什么样的视图。经过以上三条作用的解析,这条作用应该很容易理解了吧。
视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系;
视图是由基本表(实表)产生的表(虚表);
视图的建立和删除不影响基本表;
对视图内容的更新(添加、删除和修改)直接影响基本表;
当视图来自多个基本表时,不允许添加和删除数据;
MySQL的视图中的数据,会根据对应表的数据改变而改变,而且是自动完成的;
CREATE VIEW view_selectproduct
AS
SELECT id,name
FROM t_product;
视图的功能实际上是封装查询语句。
(1)封装实现查询常量语句的视图,即所谓的常量视图。
CREATE VIEW view_test1
AS
SELECT 3.1415926
(2)封装使用聚合函数(SUM、MIN、MAX、COUNT)查询语句的视图
CREATE VIEW view_test2
AS
SELECT COUNT(name)
FROM t_student;
(3)封装实现排序功能(ORDER BY)查询语句的视图
CREATE VIEW view_test3
AS
SELECT name
FROM t_student
ORDER BY id DESC;
(4) 封装实现表内连接查询语句的视图
CREATE VIEW view_test4
AS
SELECT s.name
FROM t_student as s, t_group as g
WHERE s.group_id =g.id AND g.id=2;
(5)封装了实现表外连接(LEFT JOIN 和 RIGHT JOIN)查询语句的视图。
CREATE VIEW view_test5
AS
SELECT s.name
FROM t_student as s LEFT JOIN t_group as g ON s.group_id=g.id
WHERE g.id=2;
(6)封装了实现子查询相关查询语句的视图。
CREATE VIEW view_test6
AS
SELECT s.name
FROM t_student AS s
WHERE s.group_id IN (SELECT id FROM t_group);
(7)封装了实现记录联合(UNION和UNION ALL)查询语句的视图。
CREATE VIEW view_test7
AS
SELECT id,name FROM t_student
UNION ALL
SELECT id,name FROM t_group;
**
**
SHOW TABLES (需要选中数据库)查看表和视图
SHOW TABLES STATUS FROM view \\ 查看表和视图详细信息语句,view 在这里是数据库名字
SHOW TABLES STATUS
FROM view
LIKE “view_selectproduct” \\ #从数据库view中,查看名为view_selectproduct视图的详细信息
SHOW CREATE VIEW viewname \\查看视图viewname定义信息
DESC viewname \\查看视图viewname设计信息
通过系统表查看视图信息。因为MySQL数据库安装成功后,会自动创建系统数据库information_schema。在该数据库中存在一个包含视图信息的表格views,可以通过查看表格views来查看所有视图的相关信息。
USE information_schema;
SELECT *
FROM views
WHERE table_name=‘view_selectproduct’ \G
DROP VIEW view_name 【,view_name】…
CREATE OR REPLACE 语句修改视图
CREATE OR REPLACE VIEW view_selectproduct
AS
SELECT name
FROM t_product;
ALTER语句修改视图
ALTER VIEW view_selectproduct
AS
SELECT name
FROM t_product;
SELECT * FROM view_selectproduct; #检索(查询)数据
视图是“虚表”,对视图数据进行的更新操作,实际上是对其基本表数据进行更新操作。因此对视图数据进行添加、删除和删除操作直接影响数据。但是当视图来自多个基本表时,不允许添加和删除数据。
(1)添加数据操作
INSERT INTO view_product (id,name,price,order_id)
VALUES(11,‘PEAR4’,12.3,2);
(2) 删除数据操作
DELETE FROM view_product
WHERE name=‘apple1’;
(3)更新数据操作
UPDATE view_product
set price=3.5
WHERE name=‘pear1’;
原文链接:https://blog.csdn.net/american199062/article/details/51489858/
原文链接:http://www.cnblogs.com/sustudy/p/4166714.html