mysql基础之视图

原文:mysql基础之视图

在查询中,我们经常把查询结果 当成临时表来看.

View是什么? View可以看一张虚拟表. 是表通过某种运算得到的一个投影.

既然视图只是表的某种查询的投影,所以主要步骤在于查询表上.查询的结果命名为视图就可以了.

视图与表的关系

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

 

视图改变了呢?

0: 视图增删改也会影响表

1: 但是,视图并是总是能增删改的.

 

视图某种情况下,是可以修改的.

要求: 视图的数据和表的数据 11对应. 就像函数的映射.

表-->推出视图对应的数据

视图-->推出表对应的数据

视图的定义:

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

 

视图的创建语法:

Create view 视图名 as  select 语句;

 

视图的删除语法:

Drop view 视图名

 

视图的修改

Alter view 视图名 as select xxxxxx

 

 

为什么要视图?

答:1:可以简化查询

 

2: 可以进行权限控制

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

 

3: 大数据分表时可以用到

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

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

视图的algorithm

Algorithm = merge/ temptable/ undefined

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

Temptable:当引用视图时,根据视图的创建语句建立一个临时表

Undefined:未定义,自动,让系统帮你选.

 

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

把查询视图的语句(比如where那些)与创建时的语句where子句等合并,分析.

形成一条select 语句.

例: 创建视图的语句:

mysql> create view g2 as select goods_id,cat_id,goods_name,shop_price from goods where shop_price>2000

查询视图的语句:

select * from g2  where shop_price < 3000;

 

最终执行的语句:

select goods_id,cat_id,goods_name,shop_price from goods where shop_price > 2000 and shop_price < 3000

 

而temptable是根据创建语句瞬间创建一张临时表,

然后查询视图的语句从该临时表查数据.

create algorethm=temptable view g2 as select goods_id,cat_id,goods_name,shop_price from goods where shop_price > 2000

查询视图的语句:

 select * from g2  where shop_price < 3000;

 

最终执行的2句话: 取数据并放在临时表,然后去查临时表.

Select  goods_id,cat_id,goods_name,shop_price from goods where shop_price > 2000;

========> temptable

 

再次查临时表

Select * from temptable where shop_price< 3000

时间: 2024-11-08 19:23:15

mysql基础之视图的相关文章

Mysql基础知识点汇总_Mysql

1.什么是SQL语句 sql语言:结构化的查询语言.(Structured Query Language),是关系数据库管理系统的标准语言. 它是一种解释语言:写一句执行一句,不需要整体编译执行. 语法特点: 1.没有" ",字符串使用' '包含 2.没有逻辑相等,赋值和逻辑相等都是= 3.类型不再是最严格的.任何数据都可以包含在' '以内 4.没有bool值的概念,但是在视图中可以输入true/false 5.它也有关系运算符:> < >= <= = <

PHP 和 MySQL 基础教程(三)

mysql|基础教程 用 cookies 来跟踪识别用户 让我们来看看保存在浏览器中的内容.如果你用的是 IE5 ,在 windows 目录下有一个 cookies 的目录,里面有很多文本文件,文件名都是类似于 wudong@15seconds[1].txt 这样的,这就是浏览器用来保存值的 cookies 了.在以前的 IE 版本中, cookies 的内容是可以察看的,但现在内容已经被编码了.在浏览器得到一个 Web 页面之前,它会先看这个页面的域名,是否在 cookie 中存在,如果有相比

PHP 和 MySQL 基础教程(二)

mysql|基础教程 数据验证 清理空格 trim 函数将清除数据头尾的空格,它的语法是: trim ($first_name); 必填字段的处理 在你数据库中,有些字段时必须填写的.这样对应于 HTML 表单的相应的字段也不允许空出来不填.当然,这个检验处理的过程可以用客户端的 JavaScript 脚本来处理,但既然我们讲的是 PHP ,就还使用 PHP 来处理吧.下面的代码检查用户的姓是否输入: if (ereg(".", $first_name) == 1) { print (

PHP 和 MySQL 基础教程(一)

mysql|基础教程 HTML 和 PHP .MySQL 的交互 为什么要用到数据库? World Wide Web (WWW) 不仅仅是一个提供信息的地方.如果你有什么东西,作一个网站,同样可以和全世界的人一起分享.但是,这并不是一件很容易的事.当网站越做越大时,你可能会遇到这样的问题: 网站包含了太多的东西,使得访问者不能够很快得得到他们想要的东西.这个问题在某种程度上对一个网站而言是致命的. 访问者想要向你提供信息,而且这些信息必须保存下来以备后用. 上面的两个问题,都可以通过数据库来解决

PHP 和 MySQL 基础教程(四)

mysql|基础教程 MySQL 中的 SQL 对于 MySQL ,第一件你必须牢记的是它的每一行命令都是用分号 (;) 作为结束的,但--没有完全绝对的事,在这儿也是一样. 前面我曾经讲到,当一行 MySQL 被插入在 PHP 代码中时,最好把后面的分号省略掉,例如: mysql_query ("INSERT INTO tablename (first_name, last_name) VALUES ('$first_name', '$last_name') "); 这是因为 PHP

mysql基础笔记

1.mysql的安装图解. 2.不同数据库的区别对程序的影响 1)数据类型 2)分页的问题 sql的分页相当简单,不同数据库的分页是不同的.sql server也比较简单,只有oracle比较难一些. 3)数据库的自动递增字段 3.mysql的日期处理 4.连上java连上mysql验证实例: import java.sql.*; public class testmysqlconnection { /** * @param args */ public static void main(Str

mysql基础使用

mysql基础使用   1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码      1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码. 如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql> 2.连接到远程主机上的MY

mysql基础之对库表操作

原文:mysql基础之对库表操作 查看一下所有的库,怎么办? Mysql>Show databases;   选库语句: Use 库名 创建一个数据库: create database 数据库名 [charset 字符集] 删除一个数据库: drop database 数据库名; 把数据库改改名? Mysql中,表/列可以改名,database不能改名. phpMyAdmin似乎有这功能? 他是建新库,把所有表复制到新库,再删旧库完成的. 当选了库之后,我们面对的是表 查看库下面的所有表: sh

mysql中创建视图时视图的名称对数据有影响?!?

问题描述 mysql中创建视图时视图的名称对数据有影响?!? 这学期刚刚学数据库,关于mysql创建视图的问题 创建视图的语句: create view supply(sno, pno, qty) as select spj.sno, spj.pno, spj.qty from spj, j where j.jno = spj.jno and j.jname = '三建'; 这样视图创建成功,但是select * from supply;时查询结果是空empty set. 如果将视图名由supp