视图:
视图从已经存在的表中导出,还可以从已经存在的视图导出,数据库只保存视图的定义,而没有存放视图的数据。视图的数据还是保存在原来的表中。
视图的数据依赖于原来的表,一旦原来的表发生改变,视图的数据也相应变化。删除或更新视图的数据,原表的数据也会一起改变。
如果需要经常查询多个表的制定字段的数据,可以在这些表上建立一个视图。
MySQL的视图不支持输入参数的功能。
视图的作用:可以起到筛选器的作用,那些对用户没有用或者用户没有权限了解的信息可以直接屏蔽掉,归纳为:使操作简化,增加数据的安全性,提高表的逻辑独立性。
既:虚表
语法:
(
create or replace view view_name [(field1_name,field2_name, ...)] as select_statement where ...
)
创建视图:
create or replace view temp as select student.name
as '姓名',score.math+score.chinese+score.english+score.mul as '总成绩' from student,score where student.id=score.s_id;
create or replace view temp (姓名,总分)
as select student.name,score.math+score.chinese+score.english+score.mul from student,score where student.id=score.s_id;
删除视图:
drop view temp_name;
修改视图:
alter view view_name (field1_name,field2_name ... ) as select field1_name,field2_name ... from tb_name;
更新视图:
update view_name set field_name=value where ...
删除数据:
delete from view_name where ...
怎么判断一个表时虚表还是实表:
show table status like 'table_name/view_name'; status(状态) 虚表的所有属性都是空,而实表都有所有属性。
增加或删除视图中的字段都可以直接创建一个新的视图去替换原来的视图。用创建视图的语法。
不能直接向图中插入数据,插入数据都只能直接操作实表。
algorithm(算法) merge(合并) temptable(临时表) undefined(未定义):
对于merge ,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
对于temptable,视图的结果将被置于临时表中,然后使用它执行语句。
对于undefined,mysql自己选择所要使用的算法。如果可能,它倾向于merge而不是temptable,这是因为merge通常更有效,而且如果使用了临时表,视图是不可更新的。
当视图中包含如下内容的时候,视图的更新操作将不能被执行
(1)视图中包含基本中被定义为非空的列
(2)定义视图的SELECT语句后的字段列表中使用了数学表达式
(3)定义视图的SELECT语句后的字段列表中使用聚合函数
(4)定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY 、HAVING子句