MySQL视图是一个虚拟表,其内容由查询定义。 与实际表一样,视图包含一系列命名的列和行数据。 但是,视图不作为一组存储在数据库中的数据值存在。 行和列数据是在定义视图查询引用的表以及引用视图时动态生成的。
MySQL视图类似于对引用的基础表进行过滤。 可以从当前数据库中的一个或多个表或其他数据库中的其他视图中过滤定义视图。 通过视图进行查询没有限制,更改数据时也没有多少限制。
视图是存储在数据库中的查询的sql语句。 主要出于安全原因,视图可以隐藏一些数据。 例如,社会保险基金表只能显示姓名、地址,不显示社会保险号码和工资等。 另一个原因是,复杂的查询可以很容易理解地使用。
案例测试:
测试表:用户具有id、name、age和sex字段
测试表:goods包含id、name和price字段
测试表:ug包含id、userid和goodsid字段
视图的作用非常强大。 以下是我体验到的好处。
作用1 :
提高了复用性,像函数一样。 频繁获取用户的name和goods的name时。 必须使用以下sql语言: 示例:
select a.name as username,b.name as goodsname from user as a,goods as b,ugascwherea.id=c.useridandc.goods id=b.id;
但是,如果有视图就不一样了。 创建视图轮廓。 样品
createviewotherasselecta.nameasusername,b.name as goodsname from user as a,goods as b,ugascwherea.id=c.useridandc.gom
创建视图后,可以以这种方式获取用户的名称和goods的名称。 示例:
选择*从other;
通过以上sql语句,可以获取用户的name和goods的name。
作用2 :
在不影响程序执行的情况下重建数据库。 由于某种需求,需要将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; 我不会报告错误之类的。 这样就可以在不更改脚本程序功能的情况下修改数据库的结构。
作用3 :
安全性提高了。 每个用户可以设置不同的视图。 例如,某个用户只能检索user表中name和age的数据,而不能检索sex的数据。 可以这样创建视图。 以下是示例。
create view other as select a.name,a.age from user as a;
然后,sql语句: select * from other; 最多只能取得name和age的数据,不能取得其他数据。
作用4 :
使数据更明确。 想要什么样的数据,就创建什么样的视图。 经过以上三种作用的分析,这种作用应该不难理解吧