mysql之视图

1.什么是视图?

视图是由查询结果形成的一张虚拟表。

2.什么时候要用到视图?

如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询

3.视图的创建语法:

create view 视图名 as select 语句;

4.使用视图有什么好处呢?

①简化查询语句

比如:有一张商品表,我们经常要查每个栏目下商品的平均价格

select cat_id,avg(shop_price) from goods gropy by cat_id;

这时候我们就可以创建一张视图:

create view avgPrice as select cat_id,avg(shop_price) from goods gropy by cat_id;

创建完,以后我们要查每个栏目的平均价格时,只要这么写

select * from avgPrice;就可以了。

②可以进行权限控制

把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据列

比如我们的goods商品表,我们不想让别人看到我们的销售价格,这时候我们就可以把查看商品表的权限封闭,创建一张视图

create view showGoods as select goods_id,goods_name from goods;

不出现销售价格列就可以了。

③大数据分表时可以用到

比如表的行数据超过200万行时,速度就会变慢

可以把一张表的数据拆成4张表来存放

News表

newsid  1,2,3,4...

news1,news2,news3,news4表

把一张表的数据分散到4张表里,分散的方法有很多,

最常用的是id取模来计算

id%4+1=[1,2,3,4]

...

还可以用视图,把四张表形成一张视图

create view news as select * from news1 union select * from news2 union ...

5.视图的修改

alter view 视图名 as select 语句;

6.视图与表的关系

视图是表的查询结果,自然表的数据变了,会影响视图的结果

7.那么视图改变了会影响到表吗?

①视图的增删改也会影响表;

②但视图并不总是能增删改的;

视图的数据与表的数据一一对应时可以修改;

对于视图的insert还应注意:视图必须包含表中没有默认值的列。

8.视图的algorithm(运算规则)

algorithm = merge/temptable/undefined

merge:当引用视图时,引用视图的语句与定义视图的语句合并

意味着视图只是一个规则,语句规则,当查询视图时,把查询视图的语句

比如:where...那些与创建时的语句where子句等合并,分析,形成一条select语句。

举个列子:

我们先创建一张视图查询所有商品价格大于3000的商品

create view g2 as select goods_id,goods_name,shop_price from goods where shop_price > 3000;

然后我们再查询视图的时候,再加上一个where条件<5000

select * from g2 where shop_price < 5000

这时候它就会把两条语句合并分析最终形成这样一条select语句

select goods_id,goods_name,shop_price from goods where shop_price > 3000 and shop_price < 5000;

temptable:是根据创建语句瞬间创建一张临时表,然后查询视图的语句从该临时表查数据

merge 和 temptalbe 有一个显著的区别:

merge最终去查的还是goods表,而temptable去查的是虚拟表。

举个例子:我们要得到每个栏目下最贵的商品

首先我们创建一张视图查出每个栏目的商品按价格降序排序

create view lmj as select cat_id,goods_id,goods_name,shop_price from goods order by cat_id,shop_price desc;

这时候我们在查询这张视图的时候再对cat_id进行分组是不是就能得到我们想要的结果呢?

select * from lmj group by cat_id;

答案是不能的,因为它把我们的创建视图的语句和查询视图的语句合并成

select cat_id,goods_id,goods_name,shop_price from goods group by cat_id order by cat_id,shop_price desc;

而如果我们在创建视图的时候指定了它的运算规则为:temptable

create algorithm=temptable view lmj as select cat_id,goods_id,goods_name,shop_price from goods order by cat_id,shop_price desc;

然后我们再查询视图:select * frm lmj group by cat_id;就能得到我们想要的结果了。

它会先把select cat_id,goods_id,goods_name,shop_price from goods order by cat_id,shop_price desc;这句sql语句取到的结果放到一张临时表,然后我们再从这张临时表查自然能得到我们想要的结果了,而不是合并了再去查。

undefined:未定义,自动,让系统帮你选。

时间: 2024-10-31 18:00:52

mysql之视图的相关文章

mysql 查询表,视图,触发器,函数,存储过程

1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND  TABLE_TYPE ='BASE TABLE' mysql查询建表语句: show create table `表名` 2.mysql查询所有视图: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名'

mysql view(视图)

一,什么是视图 视图是存放数据的一个接口,也可以说是虚拟的表.这些数据可以是从一个或几个基本表(或视图)的数据.也可以是用户自已定义的数据.其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面的数据发生变动时,视图里面的数据随之变动. 二,视图有什么用 1,视图可以让查询变得很清楚 如果您要找的数据存放在三张关系表里面,查看数据的时候,你就要写个联合查询了.换种方法,我把联合查询的数据放到视图里面,这样查询起来是不是更方便呢,通phpmyadmin看着是不是更清淅呢. 2,保护数据库的重

第五章 MySQL事务,视图,索引,备份和恢复

第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行,要么都不执行. 事务是作为最小的控制单元来使用的,特别使用与多用户同时操作的数据库系统. 2.为什么需要事务 事务(transaction)是指将一系列数据操作捆绑成为一个整体进行统一管理,如果某一事务执行成功,则在该事务中进行的所有数据均会提交,成为数据库中永久的组成部分.如果事务执行遇到错误且

MySQL数据库视图

day05 MySQL数据库视图 一.视图概述: 视图是一个虚拟表,是从数据库中一个或多个表中导出来的表,内容是由查询定义的.数据库中只存在视图的定义,而没有相关的数据,这些数据四存放在原来的表中.因此,视图是依赖于原来的表中的数据,表中数据改变,视图中的数据也会改变. 视图的作用: 1.具有简单性. 2.具有安全性. 3.逻辑数据独立性. 二.视图: 1.创建视图:         create view 视图名 as select * from 表名;  注意事项: 1.运行创建视图的语句需

mysql数据库视图连接出现2003&#183;&#183;&#183;&#183;错误

MySQL利用视图工具连接数据库时出现2003····错误                                                  原因:MySQL的服务没有开启 解决步骤: 1.启动任务管理器(可 单击任务栏空白处) 2.找到服务  --->MySQL  启动 3.再重新打开连接

MySQL的视图view,视图创建后,会随着表的改变而自动改变数据

首先是创建视图 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `new_view` AS (select `girls`.`id` AS `id`,`girls`.`name` AS `name`,`girls`.`age` AS `age`,`girls`.`level` AS `level` from `girls`); 红色的代码时mysql自动生成的, 一般创建VIEW的SQ

MySQL之视图、触发器、事务、存储过程、函数 流程控制

阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部都做了,也就是说它想要完成一件事,以后想开发的人,例如想写python程序的人,你就专门的写你自己的python程序,以后凡是关于数据的增删改查,全部都在MySQL里面完成,也就是说它想实现一个数据处理与应用程序的一个完全的解耦和状态,比如说,如果我是个应用程序员,我想要查询数据,我不需要自己写sql语句,只需要调用mysql封装好的一些功能,直

Mysql 之 视图,触发器,存储过程,函数,事物,数据库锁,数据库备份

Mysql 之 视图,触发器,存储过程,函数,事物,数据库锁,数据库备份 阅读目录 一:视图 二:触发器 三:存储过程 四:函数 五:事物 六:数据库锁 七:数据库备份 一:视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点; 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系. 2. 视图是由基本表(实表)产生的表(虚表). 3. 视图的建立和删除不影响基本表. 4. 对视图内容的更新(添加.删除和修改)直接影响基本表

MySQL之视图操作

MySQL之视图操作 视图 什么是视图 视图就是一条select语句执行后返回的结果集,所以我们在创建视图的时候,主要的工作就是在创建这条select语句上. 视图的特性 视图是对若干张基本表的引用,是一张虚表,查询语句执行的结果,不存储具体的数据(基本表发生了改变,视图也会跟着被改变) 和基本表一样,也可以增删改查操作(但是增删改操作会有一定的条件限定) 视图的作用 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性 更加安全,数据库授权命令不能限制到特定的行和特定的列,但是通过合理的

mysql之视图,触发器,事务等。。。

mysql之视图,触发器,事务等... 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推