mysql基础教程(1)---视图
2015-11-12 09:55
447 查看
视图
参考mysql必知必会, 有不足和误解处还望指点。视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
视图的作用是让你把复杂的查询写在一起,方便重用。他的优点如下
重用SQL语句。
简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。
使用表的组成部分而不是整个表。
保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
假设有一查询语句
-- 根据用户id查询该用户姓名、地址、订单id, 订单价格(用户和订单的关系应该是一对多, 这里只做演示) select u.name, u.address, o.id, o.price from user u, order o where u.id = o.u_id and u.id = 1
假设该sql足够复杂, 每次我们想获取用户名和订单时都要经过这复杂的sql来查询,这是可把该sql语句封装成一视图
-- 创建视图用create view 跟试图名, 视图名要求在该数据库唯一, 在在后面跟上AS语句即可跟上自己的sql create view viewname as select u.name, u.address, o.id, o.price from user u, order o where u.id = o.u_id and u.id = 1
此时该视图viewname 相当于一张表,只是是虚拟的表, 该虚拟表会又你的sql语句所查询的各个字段组成, 如上面的这个视图打开后就是如下格式
name | address | id | price |
---|---|---|---|
admin | chongqing | 1 | 5200 |
admin2 | chongqing1 | 11 | 5202 |
admin3 | chongqing2 | 12 | 5203 |
admin4 | chongqing3 | 13 | 5204 |
select * from viewname where id > 10 and name like '%admin%'
可直接把该视图当做表来查询, 当基础表(此为用户表和点单表)数据发生改变时, 视图也相应的更新。
迄今为止的所有视图都是和SELECT语句使用的。
然而,视图的数据能否更新?答案视情况而定。通常,视图是可更新的(即,可以对它们使用INSERT、UPDATE和DELETE)。更新一个视图将更新其基表(可以回忆一下,视图本身没有数据)。如果你对视图增加或删除行,实际上是对其基表增加或删除行。
但是,并非所有视图都是可更新的。基本上可以说,如果MySQL不能正确地确定被更新的基数据,则不允许更新(包括插入和删除)。这实际上意味着,如果视图定义中有以下操作,则不能进行视图的更新:
分组(使用GROUP BY和HAVING);
联结;
子查询;
并;
聚集函数(Min()、Count()、Sum()等);
使用视图应注意的限制
与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)
对于可以创建的视图数目没有限制。
为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。
视图不能索引,也不能有关联的触发器或默认值。
视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复