MYSQL复习笔记12-视图
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-视图相关推荐
- MySQL复习笔记【上】
对MySQL语法的总结,适合[复习使用] 参考视频B站尚硅谷MySQL教程,同时也很大程度上是这位小伙伴笔记的浓缩,笔记链接https://blog.csdn.net/m0_46153949/arti ...
- MySQL复习笔记(燕十八)
mysql复习 一:复习前的准备 1:确认你已安装wamp 2:确认你已安装ecshop,并且ecshop的数据库名为shop 二 基础知识: 1.数据库的连接 mysql -u -p -h -u 用 ...
- Mysql 复习笔记- 基础篇12 [函数定义概述]
MySQL不仅内置了一些常用函数,同时也支持自定义函数,来满足开发者的需求 函数定义 MySQL的函数定义语法如下: CREATE [DEFINER = { user | CURRENT_USER } ...
- MySQL复习笔记(三)
6.事物(Transaction)★★★★★ (1).基础知识: 事务是由一步或几步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行.程序和事务是两个不同的概念.一般而言,一 ...
- Mysql复习笔记(day02 SQL)
SQL分类 SQL语言在功能上主要分为如下3大类 DDL(Data Definition Languages 数据定义语言),这些语句定义了不同的数据库,表,视图,索引等数据库对象,还可以用来创建,删 ...
- mysql学习笔记12 其他函数
1.概述: 举例: 查询用户 mysql> select user(); +--------------------+ | user() | +--------------------+ | r ...
- Android复习笔记(12) -handler的使用
handler主要实现现在之间的通信.在子线程中执行耗时操作,通过handler传递数据给主线程进行UI的更新. 用法: 1.在主线程中创建Handler子类对象, 重写handleMessage() ...
- Linux学习笔记12——配置ftp、squid、Tomcat、Samba、MySQL主从
Linux学习笔记12 Linux学习笔记12 配置FTP服务 配置pure-ftpd 开机启动 上传下载文件 配置vsftpd CentOS 70安装配置Vsftp服务器 搭好vsftp之后出现55 ...
- Mysql 学习笔记(快速复习)
Mysql 学习笔记(快速复习) 一.MySQL 基础 1.数据库连接工具 1.1.Navicat 使用教程 2.DDL 操作数据库 2.1.创建新数据库 2.2.删除数据库 2.3.使用数据库 3. ...
- 笔记12 SQL优化
笔记12 性能与SQL优化 1.性能优化 复习一下什么是性能: DB/SQL 优化是业务系统性能优化的核心 2.关系数据库 MySQL 什么是关系数据库 数据库设计范式 常见关系数据库 SQL 语言 ...
最新文章
- 【JUC并发编程05】集合的线程安全
- tp5获取所有请求参数、请求头和IP(亲测)
- JAVA和javascrito_JAVA 和JavaScript的split方法异同
- 【剑指offer】面试题58 - II:左旋转字符串(Java)
- 干货|Flutter 原理与闲鱼深度实践
- SOA进入成熟应用阶段仍需时日
- Apache Hadoop YARN
- java迷宫算法继承_求Java关于迷宫的算法(用栈实现)
- ProGuard编译与使用
- 51单片机最小系统原理分析
- 家用计算机常见故障及解决方式,计算机常见的五大故障及解决办法
- echarts树形结构实现组织架构图
- MT6589下载工具,MT6589刷机工具
- Eclipse笔记-关于Maven Pom Editor的一个小问题
- 2021 第四届安洵杯 MISC wp
- Python 操作Excel(xlrd和xlwt)
- 火车运输(NOIP2013)
- 百度地图点聚合功能php,百度地图js lite api 支持点聚合
- 2022-2028年全球与中国热真空室行业发展趋势及投资战略分析
- 微信短视频去水印小程序搭建教程(含源码),超级详细哦,支持流量主的
热门文章
- GTK 3.0弹出窗口及设置背景图片的代码
- 管理感悟:如何看待培训
- 如何删除win10的windows.old
- 网博士自助建站系统_自助建站系统软件不一样的建站方式
- php个人资料表单显示,php-如何显示用户从表单构建器中选择的带...
- python服务器查看文件更改记录,python 查看远程服务器上的文件
- C# richTextBox重刷最后一行,richTextBox只更新最后一行
- openstack实例状态错误_CSS超炫加载动画设计、实现与实例讲解
- python课程第三周小结_python周报第三周
- JAVA学习day10