精华内容
下载资源
问答
  • 为什么使用mysql视图

    千次阅读 2021-01-19 20:13:21
    因为视图的诸多优点,如下:1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。2)安全:使用视图的用户只能访问他们被允许查询的结果集,...

    因为视图的诸多优点,如下:

    1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

    2)安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。

    3)数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

    总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

    一、创建视图

    create view [(column_list)]

    as select语句

    with check option;

    二、查看视图

    1、使用show create view语句查看视图信息

    mysql> show create view v_F_players\G;

    2、视图一旦创建完毕,就可以像一个普通表那样使用,视图主要用来查询

    mysql> select * from view_name;

    3、有关视图的信息记录在information_schema数据库中的views表中

    mysql> select * from information_schema.views

    -> where TABLE_NAME='v_F_players'\G;

    三、drop删除视图

    删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据,也就是说不动基表:

    DROP VIEW [IF EXISTS]

    view_name [, view_name] ...

    mysql> drop view v_student;

    如果视图不存在,则抛出异常;使用IF EXISTS选项使得删除不存在的视图时不抛出异常。

    展开全文
  • 测试表:user有id,name,age,sex字段测试表:goods有id,name,price字段测试表:ug有id,userid,goodsid字段视图的作用实在是太强大了,以下是我体验过的好处:作用一:提高了重用性,就像一个函数。如果要频繁获取...

    测试表:user有id,name,age,sex字段

    测试表:goods有id,name,price字段

    测试表:ug有id,userid,goodsid字段

    视图的作用实在是太强大了,以下是我体验过的好处:

    作用一:

    提高了重用性,就像一个函数。如果要频繁获取user的name和goods的name。就应该使用以下sql语言。示例:

    select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;

    但有了视图就不一样了,创建视图other。示例

    create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;

    创建好视图后,就可以这样获取user的name和goods的name。示例:

    select * from other;

    以上sql语句,就能获取user的name和goods的name了。

    作用二:

    对数据库重构,却不影响程序的运行。假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结构如下:

    测试表:usera有id,name,age字段

    测试表:userb有id,name,sex字段

    这时如果php端使用sql语句:select * from user;那就会提示该表不存在,这时该如何解决呢。解决方案:创建视图。以下sql语句创建视图:

    create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;

    以上假设name都是唯一的。此时php端使用sql语句:select * from user;就不会报错什么的。这就实现了更改数据库结构,不更改脚本程序的功能了。

    作用三:

    提高了安全性能。可以对不同的用户,设定不同的视图。例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。示例如下:

    create view other as select a.name, a.age from user as a;

    这样的话,使用sql语句:select * from other; 最多就只能获取name和age的数据,其他的数据就获取不了了。

    原文:https://www.cnblogs.com/curedfisher/p/13023732.html

    展开全文
  • 与包含数据的表不一样,视图只包含使用时动态检索数据的查询。理解视图的最好方法是看一个例子:输入:select cust_name ,cust_contact from customers,orders,orderitems where customers.cust_id =...

    视图简介

    需要MySQL 5 MySQL 5添加了对视图的支持。因此,本章内容适用于MySQL 5及以后的版本。

    视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

    理解视图的最好方法是看一个例子:

    输入:select cust_name ,cust_contact from customers,orders,orderitems where customers.cust_id = orders.cust_id and orderutems.order_num = order.orders.order_num and prod_id = 'TNT2';

    此查询用来检索订购了某个特定产品的客户。任何需要这个数据的人都必须理解相关表的结构,并且知道如何创建查询和对表进行联结。为了检索其他产品(或多个产品)的相同数据,必须修改最后的 WHERE 子句。现在,假如可以把整个查询包装成一个名为 productcustomers 的虚拟表,则可以如下轻松地检索出相同的数据:

    输入:select cust_name ,cust_contact from productcustomers where prod_id = 'TNT2';

    这就是视图的作用。 productcustomers 是一个视图,作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询(与上面用以正确联结表的相同的查询)。

    为什么使用视图

    我们已经看到了视图应用的一个例子。下面是视图的一些常见应用。

    1.重用SQL语句。

    2.简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。

    3.使用表的组成部分而不是整个表。

    4.保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。

    5.更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

    在视图创建之后,可以用与表基本相同的方式利用它们。可以对视图执行 SELECT 操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据(添加和更新数据存在某些限制。关于这个内容稍后还要做进一步的介绍)。

    重要的是知道视图仅仅是用来查看存储在别处的数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。

    性能问题 因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。如果你用多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会发现性能下降得很厉害。因此,在部署使用了大量视图的应用前,应该进行测试。

    使用视图

    在理解什么是视图(以及管理它们的规则及约束)后,我们来看一下视图的创建。

    1.视图用 CREATE VIEW 语句来创建。

    2.使用 SHOW CREATE VIEW viewname ;来查看创建视图的语句。

    3.用 DROP 删除视图,其语法为 DROP VIEW viewname;。

    4.更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE ORREPLACE VIEW。如果要更新的视图不存在,则第 2 条更新语句会创建一个视图;如果要更新的视图存在,则第 2 条更新语句会替换原有视图。

    视图的规则和限制

    下面是关于视图创建和使用的一些最常见的规则和限制。

    1.与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。

    2.对于可以创建的视图数目没有限制。

    3.为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。

    4.视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。

    5.ORDER BY 可以用在视图中,但如果从该视图检索数据 SELECT 中也含有 ORDER BY ,那么该视图中的 ORDER BY 将被覆盖。

    6.视图不能索引,也不能有关联的触发器或默认值。

    7.视图可以和表一起使用。例如,编写一条联结表和视图的 SELECT语句。

    展开全文
  • MySQL视图使用

    2021-02-02 16:50:01
    视图即是虚拟表,也称为派生表,因为它们的内容都派生自其它表的查询结果。虽然视图看起来感觉和基本表一样,但是...轻松应对复杂的查询需求视图的基本使用:创建:例如我们本身有一个这样的基本表:mysql> selec...

    视图即是虚拟表,也称为派生表,因为它们的内容都派生自其它表的查询结果。虽然视图看起来感觉和基本表一样,但是它们不是基本表。基本表的内容是持久的,而视图的内容是在使用过程中动态产生的。——摘自《SQLite权威指南》

    使用视图的优点:

    1.可靠的安全性

    2.查询性能提高

    3.有效应对灵活性的功能需求

    4.轻松应对复杂的查询需求

    视图的基本使用:

    创建:

    例如我们本身有一个这样的基本表:

    mysql> select * from students;

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

    | id   | name           | age   |

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

    |    1 | bumblebee      |   200 |

    |    1 | king of monkey | 10000 |

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

    那么就可以像这样来创建一个视图:

    CREATE VIEW stu_view AS SELECT name FROM students;

    Query OK, 0 rows affected (0.01 sec)

    创建完一个视图,可以通过查看数据库中的全部数据表来查看:

    mysql> show tables;

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

    | Tables_in_student |

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

    | stu_view          |

    | students          |

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

    2 rows in set (0.00 sec)

    可以看到当前数据库中已经把刚刚创建的视图放进数据库的表集合中了。因为视图也是一种表,是虚拟表。

    查询:

    视图的查询和基本表的查询一样,因为视图也是一种数据表,所以你可以像这样的来查询它

    mysql> select * from stu_view;

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

    | name           |

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

    | bumblebee      |

    | king of monkey |

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

    删除:

    DROP VIEW stu_view;

    删除之后可以再次查询进行验证:

    mysql> select * from stu_view;

    ERROR 1146 (42S02): Table ‘student.stu_view‘ doesn‘t exist

    接下来我们看看如果我们变动了原始的基本表,视图会有什么改变:

    mysql> INSERT INTO students(id, name, age) VALUES (2, ‘Zeus‘, 100000);

    Query OK, 1 row affected (0.00 sec)

    检查基本表:

    mysql> SELECT * FROM students;

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

    | id   | name           | age    |

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

    |    1 | bumblebee      |    200 |

    |    1 | king of monkey |  10000 |

    |    2 | Zeus           | 100000 |

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

    3 rows in set (0.00 sec)

    检查视图:

    mysql> SELECT * FROM stu_view;

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

    | name           |

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

    | bumblebee      |

    | king of monkey |

    | Zeus           |

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

    3 rows in set (0.00 sec)

    更新:

    mysql> CREATE VIEW stu_view2 AS SELECT id, name FROM students;

    Query OK, 0 rows affected (0.01 sec)

    验证:

    mysql> select * from stu_view2;

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

    | id   | name           |

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

    |    1 | bumblebee      |

    |    1 | king of monkey |

    |    2 | Zeus           |

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

    3 rows in set (0.00 sec)

    更新视图:

    mysql> UPDATE stu_view2 SET name=‘Medusa‘  WHERE id=2;

    Query OK, 1 row affected (0.01 sec)

    Rows matched: 1  Changed: 1  Warnings: 0

    检查视图更新结果:

    mysql> SELECT * FROM stu_view2;

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

    | id   | name           |

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

    |    1 | bumblebee      |

    |    1 | king of monkey |

    |    2 | Medusa         |

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

    3 rows in set (0.00 sec)

    检查基本表更新结果:

    mysql> SELECT * FROM students;

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

    | id   | name           | age    |

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

    |    1 | bumblebee      |    200 |

    |    1 | king of monkey |  10000 |

    |    2 | Medusa         | 100000 |

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

    3 rows in set (0.00 sec)

    关联多表的视图:

    以上都是基于单表的操作,接下来我们从两张表中来做一些实战。

    我们额外创建一个info表作为辅助的数据表,如下:

    mysql> select * from info;

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

    | id | stu_id | info                            |

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

    |  1 |      1 | A member of the deformed steel. |

    |  2 |      2 | Hero in Chinese Mythology.      |

    |  3 |      3 | In Greek mythology the Gorgon.  |

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

    3 rows in set (0.00 sec)

    我们创建一个连接了两张基本表的视图stu_view3

    mysql> CREATE VIEW stu_view3 AS SELECT s.id, s.name, s.age, i.info FROM students s, info i WHERE i.stu_id=s.id;

    Query OK, 0 rows affected (0.00 sec)

    验证过程:

    mysql> select * from stu_view3;

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

    | id   | name           | age    | info                            |

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

    |    1 | bumblebee      |    200 | A member of the deformed steel. |

    |    2 | king of monkey |  10000 | Hero in Chinese Mythology.      |

    |    3 | Medusa         | 100000 | In Greek mythology the Gorgon.  |

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

    3 rows in set (0.00 sec)

    对连接了两张基本表的视图stu_view3进行更新操作:

    mysql> UPDATE stu_view3 SET age=800 WHERE id=1;

    Query OK, 1 row affected (0.01 sec)

    Rows matched: 1  Changed: 1  Warnings: 0

    验证视图stu_view3:

    mysql> select * from stu_view3;

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

    | id   | name           | age    | info                            |

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

    |    1 | bumblebee      |    800 | A member of the deformed steel. |

    |    2 | king of monkey |  10000 | Hero in Chinese Mythology.      |

    |    3 | Medusa         | 100000 | In Greek mythology the Gorgon.  |

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

    3 rows in set (0.00 sec)

    验证基本表:

    mysql> select * from students;

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

    | id   | name           | age    |

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

    |    1 | bumblebee      |    800 |

    |    2 | king of monkey |  10000 |

    |    3 | Medusa         | 100000 |

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

    3 rows in set (0.00 sec)

    总结:

    1.在使用视图的时候,就是与使用表的语法一样的

    2.创建视图的时候,该视图的名字如果与已经存在表重名的话,那么会报错,不允许创建。视图就是一种特殊的表

    MySQL视图的使用

    标签:mysql   视图   view   数据库

    本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

    本文系统来源:http://blog.csdn.net/lemon_tree12138/article/details/46226689

    展开全文
  • 为什么使用视图:为了提高复杂SQL语句的复用性和表操作的安全性(例如:工资字段不想展示给所有能查看该查询结果的人),MySQL提供了视图特性。所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有...
  • mysql> show create table t2\G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`id` int(11) NOT NULL AUTO_INCREMENT,`rank1` int(11) DEFAULT NUL...
  • MySQL使用视图

    2021-01-19 07:12:31
    1. 视图创建视图create view productscustomers as select cust_name, cust_contact, prod_id from customers, orders, orderitems where customers.cust_id = orders.cust_id and orderitems.order_num = orders....
  • MySQL基础之使用视图

    2021-01-19 11:34:37
    为什么使用视图重用SQL语句简化复杂的SQL操作。在编写查询后, 可以方便的重用它而不必知道它的基本查询细节使用表的组成部分而不是整个表保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限更改...
  • MySQL如何使用视图

    2021-01-18 18:47:23
    视图是一种虚拟的数据表,...这里没有讨论DEFINER子句,这个子句是存储程序和视图使用的,它可以用来从信息安防的角度对视图数据的访问情况进行控制。如果要选取某给定数据表的数据列的一个子集,把它定义一个简...
  • 如何让MySQL为视图查询使用索引?简短的回答,提供MySQL可以使用的索引。在这种情况下,最佳指数可能是“覆盖”指数:... ON highscores (player, happened_in, score)它可能是MySQL将使用该索引,EXPLAIN将显示:...
  • Mysql视图使用总结

    2021-02-12 12:54:13
    视图View使用总结:视图可以看作为“虚拟表”,因为它返回的结果集格式与实体数据表返回的数据集格式类似,并且引用视图的方式与引用数据表的方式相同。每次查询使用视图时,DBMS会动态生成视图结果集所需要的逻辑...
  • 你认为视图不是MySQL的性能优势是对的.他们的目的是使构建在其上的其他查询更易于阅读,并确保其他用户和程序员更有可能正确使用数据.将它们视一种虚拟去标准化数据的方法,而不会影响实际对数据进行非规范化的大小/...
  • mysql视图什么用?

    2021-01-19 22:20:59
    mysql视图的作用:1、提高了重用性;2、对数据库重构,却不影响程序的运行;3、提高了安全性能,可以对不同的用户,设定不同的视图;4、让数据更加清晰。测试表:user有id,name,age,sex字段测试表:goods有id,name...
  • mysql 视图

    2021-01-27 09:01:43
    我们常把查询结果当成临时表来看view可以看作一张虚拟表,是表通过某种运算得到的一个投影因此,表的变化会影响视图(继承了表中的数据)创建视图create view 视图名 as select 语句创建成功后可当作表来使用视图用处...
  • MySQL 视图

    2021-01-19 05:18:51
    视图的概念视图是一张虚表,将查询结果集保存起来,作为视图使用。实际存在的表叫作基本表。视图的作用安全性。grant授权用户只操作视图、只读,可以保护基本表中的数据。提高查询性能。视图只是基本表的一部分,查...
  • MySQL视图的创建和使用 文章目录前言一、视图的概述1.优点二、视图的增删查改1.使用SQL语句创建视图2.查看视图3.使用show table status 语句查看视图基本信息4.使用show create view 语句查看视图详细信息修改视图...
  • mysql视图使用union

    2021-01-18 22:53:28
    CREATE VIEW `speech_label_all_uv_pv` ASselect `speech_label_uv_pv`.`cdate` AS `cdate`,`speech_label_uv_pv`.`source` AS `source`,`speech_label_uv_pv`.`page` AS `page`,`speech_label_uv_pv`.`description`...
  • Execution time: 600ms 解决方案 As soon as you mention DISTINCT or aggregation functions in a view MySQL selects TEMPTABLE algorithm for this view, and it means it will create a temporary table for ...
  • MySQL视图适用场景

    2021-01-28 07:06:38
    问题描述:MySQL视图适用于哪些场景?解决方法:1、视图能简化用户操作。视图机制使用户可以将注意力集中在所关心的数据上。如果这些数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简单、清晰,...
  • mysql 视图使用

    2021-04-24 21:26:40
    使用视图有时可以简化用户操作,尤其是在需要关联多表查询时,不用关心视图查询的内部结构,只关注在索要获取的数据上语法格式如下:CREATE VIEW AS 语法说明如下。:指定视图的名称。该名称在数据库中必须是唯一的...
  • MYSQL视图使用

    2021-02-08 01:57:02
    1、什么是视图执行一条SQL,将结果集保存在一张虚拟表中2、为什么使用视图重复利用SQL语句简化SQL查询,快速取数据只用知道表的部分结构保护数据,根据特定授权更改数据格式和表示,视图可返回与底层表的表示和...
  • 基本语法可以使用 CREATE VIEW 语句来创建视图。语法格式如下:CREATE VIEW AS语法说明如下。:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。:指定创建视图的 SELECT 语句,可...
  • MySql 视图

    2021-01-27 03:49:59
    #视图/*含义:虚拟表,和普通表一样使用mysql5.1版本出现的新特性,是通过表动态生成的数据比如:舞蹈班和普通班级的对比创建语法的关键字是否实际占用物理空间使用视图create view只是保存了sql逻辑增删改查,只是...
  • 创建视图是指在已经存在的 MySQL 数据库表上建立视图视图可以建立在一张表中,也可以建立在多张表中。基本语法可以使用 CREATE VIEW 语句来创建视图。语法格式如下:CREATE VIEW AS 语法说明如下。:指定视图的...
  • 本博将介绍视图究竟是什么,它们怎么工作,何时使用它们。我们还将看到如何利用视图简化前面章节中执行的某些SQL操作。一、视图注意:需要MySQL 5 MySQL5添加了对视图的支持。因此,本章内容适用于MySQL5及以后版本...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 173,514
精华内容 69,405
关键字:

为什么使用视图mysql

mysql 订阅