视图:是从一个或者多个表中导出来的虚拟的表。这个表根据需求而在别的表的基础上建立的表,
视图可以在已经存在的表之上建立也可以在已经存在的视图上建立。数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据还存放在原来的表中。
例如:一个公司用部门表,员工表,而部门主管只需要看到员工的工号、姓名、性别信息,对员工表中的生日、爱好等不关心,这时就需要使用视图,在员工表的基础上建立视图,建立一个虚拟的表,供部门主管看。
视图的作用:操作简单化、增加数据的安全性、提高表的逻辑独立行。
创建视图:
通过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