Date: 20140223
Auth: Jin
参考:
http://blog.sina.com.cn/s/blog_436732df0100e768.html

一、介绍
1、概念
视图是从一个或几个基本表(或视图)导出的表,是数据库的用户使用数据库的观点。
视图是一个虚表即所应对的数据不进行实际存储,数据库中只存储视图的定义。
2.视图的优点:
1).为用户集中数据简化用户的查询和处理。
2).屏蔽数据库的复杂性
3).简化用户权限的管理 grant语句可以针对视图进行授予权限。
4).便于数据库共享
5).可以重新组织数据以便输出到其他应用程序
视点集中,简化操作,定制数据,合并分割数据,安全性

3.视图的缺点
1).只有在当前数据库中才能创建视图,视图到命名必须遵循标示符命名规则不能与表同名
视图的来源数据可以是同一个实例下的其他库
2).不能把规则,默认值,或触发器与视图相关联。

二、操作SQL
1、查看库中有的视图
表明上视图表和没什么区别
SQL语句:show table status where Comment='VIEW';
3304-phpcms>show table status where Comment='VIEW';
+--------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------
+-------------+-------------+------------+-----------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time
| Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+--------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------
+-------------+-------------+------------+-----------+----------+----------------+---------+
| v_carseats_article | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | NULL | NULL | NULL | VIEW |
+--------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------
+-------------+-------------+------------+-----------+----------+----------------+---------+

2、查看创建视图的SQL语句
3304-phpcms>show create view v_carseats_article\G
*************************** 1. row ***************************
View: v_carseats_article
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`127.0.0.1` SQL SECURITY DEFINER VIEW `v_carseats_article` AS select `a`.`id` AS `id`,`a`.`title` AS
`title`,`a`.`catid` AS `module_id`,`a`.`thumb` AS `img`,`c`.`catname` AS `module_name`,`b`.`content` AS `content`,`a`.`username` AS `publish_user`,`a`.`status` AS
`is_del`,`a`.`listorder` AS `order`,`a`.`updatetime` AS `update_time`,`a`.`inputtime` AS `add_time`,`b`.`copyfrom` AS `copyfrom`,`a`.`keywords` AS
`keywords`,`a`.`islink` AS `islink`,`a`.`url` AS `url` from ((`v9_news` `a` join `v9_news_data` `b`) join `v9_category` `c`) where ((`a`.`catid` = `c`.`catid`) and
(`a`.`id` = `b`.`id`))
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

3304-anquanzuo>show create view carseats_article\G
*************************** 1. row ***************************
View: carseats_article
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`dbproxy`@`192.168.201.201` SQL SECURITY DEFINER VIEW `carseats_article` AS select `a`.`id` AS
`id`,`a`.`title` AS `title`,`a`.`catid` AS `module_id`,`a`.`thumb` AS `img`,`c`.`catname` AS `module_name`,`b`.`content` AS `content`,`a`.`username` AS
`publish_user`,`a`.`status` AS `is_del`,`a`.`listorder` AS `order`,`a`.`updatetime` AS `update_time`,`a`.`inputtime` AS `add_time`,`b`.`copyfrom` AS
`copyfrom`,`a`.`keywords` AS `keywords`,`a`.`islink` AS `islink`,`a`.`url` AS `url` from ((`phpcms`.`v9_news` `a` join `phpcms`.`v9_news_data` `b`) join
`phpcms`.`v9_category` `c`) where ((`a`.`catid` = `c`.`catid`) and (`a`.`id` = `b`.`id`))
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.01 sec)

3、创建视图
create [or replace] [algorithm = {undefined | merge | temptable}] view [db_name.]view_name [(column_list)] as select_statement [with [cascaded | local] check option]通
过该语句可以创建视图,若给定了[or replace],则表示当已具有同名的视图时,将覆盖原视图。select_statement是一个查询语句,这个查询语句可从表或其它的视图中查询。视图属于数
据库,因此需要指定数据库的名称,若未指定时,表示在当前的数据库创建新视图。

表和数据库共享数据库中相同的名称空间,因此,数据库不能包含相同名称的表和视图,并且,视图的列名也不能重复。

创建视图存在如下注意事项:
(1) 运行创建视图的语句需要用户具有创建视图(crate view)的权限,若加了[or replace]时,还需要用户具有删除视图(drop view)的权限;
(2) select语句不能包含from子句中的子查询;
(3) select语句不能引用系统或用户变量;
(4) select语句不能引用预处理语句参数;
(5) 在存储子程序内,定义不能引用子程序参数或局部变量;
(6) 在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用check table语句;
(7) 在定义中不能引用temporary表,不能创建temporary视图;
(8) 在视图定义中命名的表必须已存在;
(9) 不能将触发程序与视图关联在一起;
(10) 在视图定义中允许使用order by,但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略。

实例1:
DROP VIEW IF EXISTS `v_carseats_article`;
CREATE VIEW `v_carseats_article` AS
SELECT
`a`.`id` AS `id`,
`a`.`title` AS `title`,
`a`.`catid` AS `module_id`,
`a`.`thumb` AS `img`,
`c`.`catname` AS `module_name`,
`b`.`content` AS `content`,
`a`.`username` AS `publish_user`,
`a`.`status` AS `is_del`,
`a`.`listorder` AS `order`,
`a`.`updatetime` AS `update_time`,
`a`.`inputtime` AS `add_time`,
`b`.`copyfrom` AS `copyfrom`,
`a`.`keywords` AS `keywords`,
`a`.`islink` AS `islink`,
`a`.`url` AS `url`
FROM ((`v9_news` AS `a` JOIN `v9_news_data` AS `b`) JOIN `v9_category` AS `c`)
WHERE ((`a`.`catid` = `c`.`catid`) AND (`a`.`id` = `b`.`id`));
重点是用SELECT语句确定数据源。

实例2
本例创建一个产品表(product)和一个购买记录表(purchase),再通过视图purchase_detail查询出购买的详细信息。
准备表和数据
create table product (
product_id int not null,
name varchar(50) not null,
price double not null
);
insert into product values(1, 'apple ', 5.5);

create table purchase(
id int not null,
product_id int not null,
qty int not null default 0,
gen_time datetime not null
);
insert into purchase values(1, 1, 10, now());
创建视图
create view purchase_detail as
select
product.name as name,
product .price as price,
purchase.qty as qty,
product.price * purchase.qty as total_value
from product, purchase where product.product_id = purchase.product_id;

使用视图获取数据
select * from purchase_detail;
+-------+-------+-----+-------------+

| name | price | qty | total_value |

+-------+-------+-----+-------------+

| apple | 5.5 | 10 | 55 |

+-------+-------+-----+-------------+

4.修改
alter [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]该语句用于更改已有视图的定
义。其语法与create view类似。

将上面创建的视purchase_detail进行修改,去掉qty列,语句如下:
alter view purchase_detail as
select
product.name as name,
product.price as price,
product.price * purchase.qty as total_value
from product, purchase where product.product_id = purchase.product_id;
查询
mysql> select * from purchase_detail;
+--------+-------+-------------+
| name | price | total_value |
+--------+-------+-------------+
| apple | 5.5 | 55 |
+--------+-------+-------------+
1 row in set (0.00 sec)

三、通过更新视图实现更新真实表
参考:http://www.cnblogs.com/wangtao_20/archive/2011/02/24/1964276.html
注意:视图一般只查询,尽量避免修改,防止出现数据问题

四、视图用于远程表
http://www.cnblogs.com/diege/p/3548445.html

五、备份和迁移
1、备份和表一样
2、迁移和表一样
和存储过程不一样,DUMP时候不用特殊参数

转载于:https://www.cnblogs.com/diege/p/3563916.html

MYSQL复习笔记12-视图相关推荐

  1. MySQL复习笔记【上】

    对MySQL语法的总结,适合[复习使用] 参考视频B站尚硅谷MySQL教程,同时也很大程度上是这位小伙伴笔记的浓缩,笔记链接https://blog.csdn.net/m0_46153949/arti ...

  2. MySQL复习笔记(燕十八)

    mysql复习 一:复习前的准备 1:确认你已安装wamp 2:确认你已安装ecshop,并且ecshop的数据库名为shop 二 基础知识: 1.数据库的连接 mysql -u -p -h -u 用 ...

  3. Mysql 复习笔记- 基础篇12 [函数定义概述]

    MySQL不仅内置了一些常用函数,同时也支持自定义函数,来满足开发者的需求 函数定义 MySQL的函数定义语法如下: CREATE [DEFINER = { user | CURRENT_USER } ...

  4. MySQL复习笔记(三)

    6.事物(Transaction)★★★★★ (1).基础知识: 事务是由一步或几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.程序和事务是两个不同的概念.一般而言,一 ...

  5. Mysql复习笔记(day02 SQL)

    SQL分类 SQL语言在功能上主要分为如下3大类 DDL(Data Definition Languages 数据定义语言),这些语句定义了不同的数据库,表,视图,索引等数据库对象,还可以用来创建,删 ...

  6. mysql学习笔记12 其他函数

    1.概述: 举例: 查询用户 mysql> select user(); +--------------------+ | user() | +--------------------+ | r ...

  7. Android复习笔记(12) -handler的使用

    handler主要实现现在之间的通信.在子线程中执行耗时操作,通过handler传递数据给主线程进行UI的更新. 用法: 1.在主线程中创建Handler子类对象, 重写handleMessage() ...

  8. Linux学习笔记12——配置ftp、squid、Tomcat、Samba、MySQL主从

    Linux学习笔记12 Linux学习笔记12 配置FTP服务 配置pure-ftpd 开机启动 上传下载文件 配置vsftpd CentOS 70安装配置Vsftp服务器 搭好vsftp之后出现55 ...

  9. Mysql 学习笔记(快速复习)

    Mysql 学习笔记(快速复习) 一.MySQL 基础 1.数据库连接工具 1.1.Navicat 使用教程 2.DDL 操作数据库 2.1.创建新数据库 2.2.删除数据库 2.3.使用数据库 3. ...

  10. 笔记12 SQL优化

    笔记12 性能与SQL优化 1.性能优化 复习一下什么是性能: DB/SQL 优化是业务系统性能优化的核心 2.关系数据库 MySQL 什么是关系数据库 数据库设计范式 常见关系数据库 SQL 语言 ...

最新文章

  1. 【JUC并发编程05】集合的线程安全
  2. tp5获取所有请求参数、请求头和IP(亲测)
  3. JAVA和javascrito_JAVA 和JavaScript的split方法异同
  4. 【剑指offer】面试题58 - II:左旋转字符串(Java)
  5. 干货|Flutter 原理与闲鱼深度实践
  6. SOA进入成熟应用阶段仍需时日
  7. Apache Hadoop YARN
  8. java迷宫算法继承_求Java关于迷宫的算法(用栈实现)
  9. ProGuard编译与使用
  10. 51单片机最小系统原理分析
  11. 家用计算机常见故障及解决方式,计算机常见的五大故障及解决办法
  12. echarts树形结构实现组织架构图
  13. MT6589下载工具,MT6589刷机工具
  14. Eclipse笔记-关于Maven Pom Editor的一个小问题
  15. 2021 第四届安洵杯 MISC wp
  16. Python 操作Excel(xlrd和xlwt)
  17. 火车运输(NOIP2013)
  18. 百度地图点聚合功能php,百度地图js lite api 支持点聚合
  19. 2022-2028年全球与中国热真空室行业发展趋势及投资战略分析
  20. 微信短视频去水印小程序搭建教程(含源码),超级详细哦,支持流量主的

热门文章

  1. GTK 3.0弹出窗口及设置背景图片的代码
  2. 管理感悟:如何看待培训
  3. 如何删除win10的windows.old
  4. 网博士自助建站系统_自助建站系统软件不一样的建站方式
  5. php个人资料表单显示,php-如何显示用户从表单构建器中选择的带...
  6. python服务器查看文件更改记录,python 查看远程服务器上的文件
  7. C# richTextBox重刷最后一行,richTextBox只更新最后一行
  8. openstack实例状态错误_CSS超炫加载动画设计、实现与实例讲解
  9. python课程第三周小结_python周报第三周
  10. JAVA学习day10