MYSQL-----视图
2016-06-28 12:04
513 查看
视图
视图是从一个或者多个表中导出来的表,是一种虚拟存在的表,视图就像一个窗口,通过这个窗口可以看到对自己有用的数据。使用户的操作更方便,保证了数据库的安全性。
视图依赖原来表中的数据,一但之前表中的数据发生改变,显示在视图中的数据也会发生变化。
如果需要经常从多个表中查询指定字段的信息,通过视图可以显示这些字段的数据。
1.创建视图
创建视图是在数据库的表上创建视图,视图可以创建在一张表上也可以创建在多张表上。
ALOGORITHM是可选参数,表示视图选择的算法。
ALOGORITHM包括三个选项:
1) undefined,表示MYSQl将自动选择要使用的算法。
2)merge。表示将使用视图的语句和视图的定义结合起来,使得视图定义的某一部分取代语句中的对应部分,
3) temptable。表示将视图的结果存入临时表,然后使用临时表执行语句。
with check option是可选参数,表示更新视图时,要在这个视图的权限范围内。
在使用create view 语句创建视图时,最好加上with check option 和cascaded,保证数据的安全性。
在创建视图时不仅要有create view 权限也应有select权限。
通过该语句来查询是否有相应权限:Select_priv Create_view_priv from mysql.user where user=’root’;
当查询的属性Select_priv和Create_view_priv的值为Y时,表示该属性有相应权限。
1)在单表上创建视图。
未指定属性列:create view view_name as select * from example0.在未指定属性列的时候,该视图包含example0表的所有列
指定属性列:create view view_name(id,name) as select id,name from example0.使用视图时,用户接触不到实际操作的表和字段,保证了数据的安全性。
2)在多表上创建视图,视图可以将多个表上的操作简洁地描述出来。
create algorithm=merge view view_name(id,name,sex,age) as select id,name,sex,age from example1,example2 where exampe1.id=example2.id with local check option;
3)查看视图
查看视图基本信息
1) decribe 或 desc 视图名;
2) show table status like ‘视图名’;该语句通常很少使用。显示的各个属性的值几乎都是NULL.
视图和普通表的区别就是视图的comment项没有信息、
查看视图所有详细信息
1) show create view 视图名;
2) 在view表中查看视图详细信息
select * from information_schema.views;
所有视图的定义都是存储在information_schema这个数据库下的view表中。也可在该表中查看视图的定义。
通常我们采用show create view 视图名;来查询详细信息。
4)修改视图
1)create or replace view
当视图不存在时,可以创建视图。不仅可以修改已存在的视图还可以创建新的视图。
create or replace algorithm=temptable view view_name(id_new,name_new) as select id,name from example3;
2)alter只能对已经存在的视图进行修改。
alter view view_name(id_new,name_new) as select id,name from example4;
5)更新视图。由于视图是一个虚拟表,因此对视图的更新都是转换到基本表上的。只能更新权限范围内的数据。
update view_name set id=1;
下面的这几种情况是不能更新视图的:
1)视图中包含 sum(),count(),max(),min();
2)视图中包含 union ,union all,distinct,group by,order by,having;
3)常量字段,比如视图某属性的值是一个常量字符串。
4)视图中的select包含子查询。
5)由不可更新的视图导出的视图。
6)创建视图时,algorithm=temptable;
7)视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。
8)with [cascade| local]check option.没有指明,默认为cascaded
local表示更新视图时满足视图本身定义的条件即可,
cascaded表示更新视图时要满足所有相关视图和表的条件。
总而言之,视图虽然可以更新表中的数据,但是有很多的限制。一般情况下,最好将视图作为查询的虚拟表。而不要通过视图更新数据。
因为若没有考虑到视图更新数据的限制,容易造成更新数据的失败。
6)删除视图
首先我们来查看,我们**是否有删除的权限:**select Drop_priv from mysql.user where user=’用户名’;当属性值为Y表示拥有该权限。
删除视图只会删除视图的定义,不会删除数据。
drop view [if exists] 视图名列表 [restrict| cascade];
if exists 判断该视图是否存在,存在执行,不存在就不执行。(为啥我在我的Linux数据库版本下删除一个不存在的视图只是一个警告,可能版本升级了吧)
视图名列表之间用逗号隔开。
视图是从一个或者多个表中导出来的表,是一种虚拟存在的表,视图就像一个窗口,通过这个窗口可以看到对自己有用的数据。使用户的操作更方便,保证了数据库的安全性。
视图依赖原来表中的数据,一但之前表中的数据发生改变,显示在视图中的数据也会发生变化。
如果需要经常从多个表中查询指定字段的信息,通过视图可以显示这些字段的数据。
1.创建视图
创建视图是在数据库的表上创建视图,视图可以创建在一张表上也可以创建在多张表上。
ALOGORITHM是可选参数,表示视图选择的算法。
ALOGORITHM包括三个选项:
1) undefined,表示MYSQl将自动选择要使用的算法。
2)merge。表示将使用视图的语句和视图的定义结合起来,使得视图定义的某一部分取代语句中的对应部分,
3) temptable。表示将视图的结果存入临时表,然后使用临时表执行语句。
with check option是可选参数,表示更新视图时,要在这个视图的权限范围内。
在使用create view 语句创建视图时,最好加上with check option 和cascaded,保证数据的安全性。
在创建视图时不仅要有create view 权限也应有select权限。
通过该语句来查询是否有相应权限:Select_priv Create_view_priv from mysql.user where user=’root’;
当查询的属性Select_priv和Create_view_priv的值为Y时,表示该属性有相应权限。
1)在单表上创建视图。
未指定属性列:create view view_name as select * from example0.在未指定属性列的时候,该视图包含example0表的所有列
指定属性列:create view view_name(id,name) as select id,name from example0.使用视图时,用户接触不到实际操作的表和字段,保证了数据的安全性。
2)在多表上创建视图,视图可以将多个表上的操作简洁地描述出来。
create algorithm=merge view view_name(id,name,sex,age) as select id,name,sex,age from example1,example2 where exampe1.id=example2.id with local check option;
3)查看视图
查看视图基本信息
1) decribe 或 desc 视图名;
2) show table status like ‘视图名’;该语句通常很少使用。显示的各个属性的值几乎都是NULL.
视图和普通表的区别就是视图的comment项没有信息、
查看视图所有详细信息
1) show create view 视图名;
2) 在view表中查看视图详细信息
select * from information_schema.views;
所有视图的定义都是存储在information_schema这个数据库下的view表中。也可在该表中查看视图的定义。
通常我们采用show create view 视图名;来查询详细信息。
4)修改视图
1)create or replace view
当视图不存在时,可以创建视图。不仅可以修改已存在的视图还可以创建新的视图。
create or replace algorithm=temptable view view_name(id_new,name_new) as select id,name from example3;
2)alter只能对已经存在的视图进行修改。
alter view view_name(id_new,name_new) as select id,name from example4;
5)更新视图。由于视图是一个虚拟表,因此对视图的更新都是转换到基本表上的。只能更新权限范围内的数据。
update view_name set id=1;
下面的这几种情况是不能更新视图的:
1)视图中包含 sum(),count(),max(),min();
2)视图中包含 union ,union all,distinct,group by,order by,having;
3)常量字段,比如视图某属性的值是一个常量字符串。
4)视图中的select包含子查询。
5)由不可更新的视图导出的视图。
6)创建视图时,algorithm=temptable;
7)视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。
8)with [cascade| local]check option.没有指明,默认为cascaded
local表示更新视图时满足视图本身定义的条件即可,
cascaded表示更新视图时要满足所有相关视图和表的条件。
总而言之,视图虽然可以更新表中的数据,但是有很多的限制。一般情况下,最好将视图作为查询的虚拟表。而不要通过视图更新数据。
因为若没有考虑到视图更新数据的限制,容易造成更新数据的失败。
6)删除视图
首先我们来查看,我们**是否有删除的权限:**select Drop_priv from mysql.user where user=’用户名’;当属性值为Y表示拥有该权限。
删除视图只会删除视图的定义,不会删除数据。
drop view [if exists] 视图名列表 [restrict| cascade];
if exists 判断该视图是否存在,存在执行,不存在就不执行。(为啥我在我的Linux数据库版本下删除一个不存在的视图只是一个警告,可能版本升级了吧)
视图名列表之间用逗号隔开。
相关文章推荐
- mysql基本sql语句大全(基础用语篇)
- mysql基本sql语句大全(提升用语篇)
- mysql中char,varchar与text类型的区别和选用
- mysql的安装以及出现的问题
- Mysql Explain 详解
- mysql日常操作记录大全
- MySQL数据插入、修改、删除
- wampserver 最新版本 mysql修改数据库密码
- 解决mysql无法远程访问只需要三步
- mysql当天日期函数使用小结
- mysql中各种连接查询图解
- Mysql中utf8和utf8mb4区别
- MySQL安装、配置、测试
- mysql profile使用
- WIN MySQL设置可以远程访问
- 数据库编程细节问题 -- 4.mysql读取大文件 (Blob)
- MySQL相关链接
- ubuntu下 在线/离线安装mysql
- 根据条件筛选导出MySQL数据表中的数据
- MySQL之Split分割字符串