视图

来源:互联网 发布:java中compareto 编辑:程序博客网 时间:2024/06/11 00:24

视图:是从一个或者多个表中导出来的虚拟的表。这个表根据需求而在别的表的基础上建立的表,

视图可以在已经存在的表之上建立也可以在已经存在的视图上建立。数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据还存放在原来的表中。

例如:一个公司用部门表,员工表,而部门主管只需要看到员工的工号、姓名、性别信息,对员工表中的生日、爱好等不关心,这时就需要使用视图,在员工表的基础上建立视图,建立一个虚拟的表,供部门主管看。

视图的作用:操作简单化、增加数据的安全性、提高表的逻辑独立行。

创建视图:
通过CREATE VIEW 来实现视图的创建:
CREATE  【algorithm={ undegined | merge | temptable}】
VIEW 视图名 【(属性清单)】
 AS SELECT 语句

        【WITH  [ CASCADED | LOCAL ]  CHECK  OPTION 】;

其中 algorithm是可选参数,表示视图选择的算法;不太需要注意
 视图名:表示要创建的视图的名称。  ”属性清单“是可选参数,指定了视图中各个属性的名词,默认情况向与select语句中查询的属性相同,       ”select“语句:是一个完整的查询语句,表示从那个表查询出满足条件的记录。     WITH   CHECK OPTION是可选参数表示更新视图时要保证该视图的权限范围之内。

注:创建视图时要有create view 权限,同时应该具备查询涉及的列的select权限,在mysql数据库下的user表中保存这些信息,可以用select语句查询。 eg: select select_priv ,create_view_priv from mysql.user where user=’用户名’;

在单表上创建视图:

在department表上建立一个简单的视图:
  create view department_view1 as select * from department;

可以用desc查询结果:desc department_view1;
eg: create view department_view2(name,address) as select name ,address from department; 创建视图展示需要的信息,忽略不必要的信息。

在多表上创建视图:

在department 和worker表上创建一个work_view1的视图;
CREATE ALGORITHM=MERGE VIEW work_view1(name,department ,sex,age,address) AS SELECT name,department ,d_name,sex,2009-birthday,address FROM worker ,department WHERE worker.d_id=department.d_id WITH LOCAL CHECK OPTION;

代码执行后查询视图表work_view1时只会显示必要的结果,

查看视图的基本信息:
desc 视图名;
show table status like 视图名;
show create view 视图名;

删除视图:
 drop view [if exists] 视图名列表  [ restrict | cascade ]

索引与优化:

1、选择索引的数据类型

文章:http://blog.codinglabs.org/articles/theory-of-mysql-index.html

0 0
原创粉丝点击