精华内容
下载资源
问答
  • 视图(view)是一种虚拟存在的表,视图可以理解为是一个容器,表通过条件查询之后,将查询后的结果放入这个容器内,然后给容器命名后即为视图。视图相对于表的优势:1.简单,使用视图的用户不必关系后面的表,只需要...

    MySQL从5.0.1版本开始提供视图的功能,本次博客就来介绍一下视图,本次博客基于的版本是mysql-5.7.19。

    什么是视图?

    视图(view)是一种虚拟存在的表,视图可以理解为是一个容器,表通过条件查询之后,将查询后的结果放入这个容器内,然后给容器命名后即为视图。

    视图相对于表的优势:

    1.简单,使用视图的用户不必关系后面的表,只需要使用过滤好的内容就行了;

    2.安全,因为对表的全新不能限制到表的行或者是列,所以可以通过视图来限制用户对表的访问权限;

    3.数据独立,确定了视图的结构之后,如果给原来的表增加了列,并不会影响视图,增加行,视图的相对于的行也会增加,如果源表的列名称发生了改变,可以通过修改视图来解决。

    创建和查看视图

    语法:

    CREATE VIEW view_name AS sql

    现在有表如下:

    mysql> select * fromuserinfo;+----+----------+--------+

    | id | username | passwd |

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

    | 1 | alex | 123 |

    | 2 | frank | 123 |

    | 3 | rose | 312 |

    | 4 | tom | qqq |

    | 5 | jack | qwer |

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

    5 rows in set (0.00 sec)

    来创建视图:

    mysql> create view user_view as select username fromuserinfo;

    Query OK,0 rows affected (0.01 sec)

    show tables 命令不仅可以显示表的名字,也可以显示视图的名字:

    mysql>show tables;+---------------+

    | Tables_in_db2 |

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

    | user_view |

    | userinfo |

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

    2 rows in set (0.00 sec)

    可以通过一下命令显示视图的信息:

    mysql> show table status like 'user_view'\G;*************************** 1. row ***************************Name: user_view

    Engine:NULLVersion:NULLRow_format:NULLRows:NULLAvg_row_length:NULLData_length:NULLMax_data_length:NULLIndex_length:NULLData_free:NULLAuto_increment:NULLCreate_time:NULLUpdate_time:NULLCheck_time:NULLCollation:NULLChecksum:NULLCreate_options:NULLComment:VIEW

    1 row in set (0.00sec)

    ERROR:

    No query specified

    如果想要查看某个视图的定义,也可以使用如下命令查看:

    mysql> show create viewuser_view \G;*************************** 1. row ***************************

    View: user_viewCreate View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `user_view` AS select `userinfo`.`username` AS `username` from`userinfo`

    character_set_client: utf8

    collation_connection: utf8_general_ci1 row in set (0.00sec)

    ERROR:

    No query specified

    修改视图

    先来看这个例子:

    查看视图user_view的内容:

    mysql> select * fromuser_view;+----------+

    | username |

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

    | alex |

    | frank |

    | rose |

    | tom |

    | jack |

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

    5 rows in set (0.00 sec)

    在原表里面插入行:

    mysql> insert into userinfo(username,passwd) values('coco','123');

    Query OK,1 row affected (0.00sec)

    mysql> select * fromuser_view;+----------+

    | username |

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

    | alex |

    | frank |

    | rose |

    | tom |

    | jack |

    | coco |

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

    6 rows in set (0.00 sec)

    说明视图是可以被原始表更新的。

    如果现在把原表的username列的名称改为uname,那么user_view视图的就会出错了,这个时候就需要修改视图了。

    mysql> alter table userinfo change username uname varchar(20);

    Query OK,0 rows affected (0.01sec)

    Records:0 Duplicates: 0 Warnings: 0

    修改视图的语法如下:

    ALTER VIEW view_name AS sql

    修改视图user_view而且增加了id列:

    mysql> alter view user_view as select id,uname fromuserinfo;

    Query OK,0 rows affected (0.01sec)

    mysql> select * fromuser_view;+----+-------+

    | id | uname |

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

    | 1 | alex |

    | 2 | frank |

    | 3 | rose |

    | 4 | tom |

    | 5 | jack |

    | 6 | coco |

    | 7 | saber |

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

    7 rows in set (0.00 sec)

    那么视图的数据是否可以修改呢?视图数据修改后是否会影响原表呢?下面通过一个例子看一下:

    mysql> update user_view set uname='lancer' where id=7;

    Query OK,1 row affected (0.00sec)

    Rows matched:1 Changed: 1 Warnings: 0mysql> select * fromuser_view;+----+--------+

    | id | uname |

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

    | 1 | alex |

    | 2 | frank |

    | 3 | rose |

    | 4 | tom |

    | 5 | jack |

    | 6 | coco |

    | 7 | lancer |

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

    7 rows in set (0.00sec)

    mysql> select * fromuserinfo;+----+--------+--------+

    | id | uname | passwd |

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

    | 1 | alex | 123 |

    | 2 | frank | 123 |

    | 3 | rose | 312 |

    | 4 | tom | qqq |

    | 5 | jack | qwer |

    | 6 | coco | 123 |

    | 7 | lancer | 123 |

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

    7 rows in set (0.00 sec)

    通过以上例子说明。修改视图中的数据是可行的而且原表中的数据也会被改变。

    删除视图

    用户可以一次性的删除一个或者多个视图,语法如下:

    DROP VIEW view_name1.view_name2...

    来看下面的例子:

    mysql>show tables;+---------------+

    | Tables_in_db2 |

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

    | passwd_view1 |

    | passwd_view2 |

    | user_view_2 |

    | userinfo |

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

    4 rows in set (0.00sec)

    mysql> drop viewpasswd_view1;

    Query OK,0 rows affected (0.00sec)

    mysql>show tables;+---------------+

    | Tables_in_db2 |

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

    | passwd_view2 |

    | user_view_2 |

    | userinfo |

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

    3 rows in set (0.00 sec)

    使用pymysql操作视图

    操作视图其实和操作表是一样的,来看例子:

    import pymysql

    config={

    "host":"127.0.0.1",

    "user":"root",

    "password":"LBLB1212@@",

    "database":"db2",

    "charset":"utf8"

    }

    db= pymysql.connect(**config)with db.cursor(cursor=pymysql.cursors.DictCursor) as cursor:

    sql="SELECT * FROMpasswd_view2"cursor.execute(sql)

    res= cursor.fetchall()print(res)cursor.close()

    db.close()

    #运行结果[{'uname': 'alex', 'passwd': '123'}, {'uname': 'frank', 'passwd': '123'}, {'uname': 'coco', 'passwd': '123'}, {'uname': 'lancer', 'passwd': '123'}]

    0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • 视图是一个虚拟表,对于使用该视图的用户基本上是透明的。该视图实际上不存在于数据库中,行和列数据来自定义该视图的查询所使用的表,并且在使用该视图时动态生成。?简单:使用视图的用户完全不需要关系背后的相应...

    bc3f9276acf88283a0569b9b9ef9ee92.png

    在线QQ客服:1922638

    专业的SQL Server、MySQL数据库同步软件

    视图是一个虚拟表,对于使用该视图的用户基本上是透明的。该视图实际上不存在于数据库中,行和列数据来自定义该视图的查询所使用的表,并且在使用该视图时动态生成。

    简单:使用视图的用户完全不需要关系背后的相应表结构,关联条件和过滤条件。对于用户而言,它已经是经过过滤且合格的结果集。

    安全:使用该视图的用户只能访问其允许的结果集,并且表的权限管理不能限于特定的行某一列,但可以通过视图轻松实现。

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

    创建[或替换]视图?视图名称(第1栏,第2列…)

    AS SELECT(第1栏,第2列……)

    FROM…;

    [与[级联|局部] [检查选项]

    创建还是替换视图?查看名称?从[…]选择[…];

    [与[CASCADED |局部] [检查选项]

    显示表格;

    desc?视图名称

    显示创建视图吗?视图名称\\\\ G

    插入?视图名称

    更新?视图名称

    [与[级联| LOCAL]检查选项]?确定是否允许更新的数据记录可能不再满足视图条件。

    只要满足此视图的条件,就可以更新本地

    级联必须满足要更新的所有视图视图的所有条件,默认值为级联。

    为了防止数据由于视图修改而丢失,建议添加WITH CHECK OPTION

    视图的可更新性相关视图中查询的定义。以下类型的视图不可更新。

    1。 包含以下关键字 sql 语句:聚合函数( sum,最小,最大,计数 等) 或 全部合并。

    2. 始终显示。

    3.select 包含子查询。

    4.jion

    5.from 无法更新的视图

    6.where 句子的子查询引用 来自 句子表

    放置视图?视图名称

    注意:

    1.可以通过视图Data插入,但只能基于基本表插入,不能在整个表中更新数据

    2.视图不是表,不保存数据,只是一个虚拟表,在源表中的数据更改后,视图的结果也同步更改

    3.在正常情况下,创建受限视图时,添加” WITH CHECK OPTION”命令。

    展开全文
  • MySQL数据库视图视图定义、创建视图修改视图

    万次阅读 多人点赞 2017-03-20 11:54:15
    视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。视图不直接存储数据,不知真正表。 关系型数据库中数据是由一张一张二维关系表所组成,简单单表查询只需要遍历一个表,而复杂多表查询...

    视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。——百度百科

    关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要将多个表连接起来进行查询任务。对于复杂的查询事件,每次查询都需要编写MySQL代码效率低下。为了解决这个问题,数据库提供了视图(view)功能。

    0 视图相关的MySQL指令

    操作指令 代码
    创建视图 CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
    使用视图 当成表使用就好
    修改视图 CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
    查看数据库已有视图 >SHOW TABLES [like...];(可以使用模糊查找)
    查看视图详情 DESC 视图名或者SHOW FIELDS FROM 视图名
    视图条件限制 [WITH CHECK OPTION]

    1 视图

    百度百科定义了什么是视图,但是对缺乏相关知识的人可能还是难以理解或者只有一个比较抽象的概念,笔者举个例子来解释下什么是视图。

    朕想要了解皇宫的国库的相关情况,想知道酒窖有什么酒,剩多少,窖藏多少年,于是派最信任的高公公去清点,高公公去国库清点后报给了朕;朕又想知道藏书情况,于是又派高公公去清点并回来报告给朕,又想知道金银珠宝如何,又派高公公清点。。。过一段时间又想知道藏书情况,高公公还得重新再去清点,皇上问一次,高公公就得跑一次路。

    后来皇上觉得高公公不容易,就成立了国库管理部门,小邓子负责酒窖,小卓子负责藏书,而小六子负责金库的清点。。。后来皇上每次想了解国库就直接问话负责人,负责人就按照职责要求进行汇报。
    视图

    安排专人管理后,每次皇上想要了解国库情况,就不必让高公公每次都跑一趟,而是指定的人员按照指定的任务完成指定的汇报工作就可以了。

    和数据库相对应,每次进行查询工作,都需要编写查询代码进行查询;而视图的作用就是不必每次都重新编写查询的SQL代码,而是通过视图直接查询即可。因此:

    视图是虚拟表,本身不存储数据,而是按照指定的方式进行查询。

    比如,我们希望从前文提到的四张表,order_baisc,order_details,user和product中查找所有记录,需要写入代码指令:
    查询
    想再次查询这几个表中uid为u0001的用户的记录,有需要键入一次操作指令:
    查询
    也就是说,每次查询都得重新键入查询指令SQL代码,这种费时费力的体力活,对于时间就是生命的你我来说,是不划算的。所以借助视图,来执行相同或相似的查询。

    2 创建视图

    2.1 创建视图create view
    创建视图的代码为:

    >CREATE VIEW 视图名(列1,列2...)
     AS SELECT (列1,列2...)
     FROM ...;

    可以看到,创建视图和查询相比,增加了前面的CREATE VIEW 视图名 AS

    2.2 视图运用

    使用视图和使用表完全一样,只需要把视图当成一张表就OK了。视图是一张虚拟表。

    eg:创建order_baisc,order_details,user和product的查询视图,并通过视图查找uid为u0001的记录:
    创建视图

    2.3 修改视图CREATE OR REPLACE VIEW

    修改和创建视图可以使用代码:

    CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];

    eg:
    修改视图

    2.4 查看视图
    (1)查看数据库中有哪些视图 show tables
    前面提到,视图就是虚拟的表,因此,查看视图的方法和查看表的方法是一样的:

    >SHOW TABLES;

    查看视图

    通过show tables;反馈得到所有的表和视图。同样的,我们可以通过模糊检索的方式专门查看视图,这个时候,视图的命令统一采用v_v_视图名的优势就体现出来了。
    (2)查看视图详情
    查看视图详情的方法有两种,一种是和查看表详情一样使用desc 视图名,另外一种方法是show fields from 视图名

    >DESC 视图名;
    或者
    >SHOW FIELDS FROM 视图名;

    查看视图详情

    两种方法得到的详情都是一毛一样的。

    3 视图与数据变更

    3.1 表格数据变更
    将表product中的数据进行更新,在通过视图检索:

    视图与数据变更

    可以看到表格数据变化后,在通过视图检索,得到的结果也同步发生了变化,因此,在此证明了:

    视图不是表,不保存数据,知识一张虚拟表;

    3.2 通过视图变更数据

    • (1)插入数据
    >INSERT INTO v_order(pid,pname,price) VALUES('p010','柴油','34');

    在此查询视图,发现插入了数据。

    视图变更数据

    • (2)跨表插入数据
      通过上图,我们可以看到,跨表插入数据系统反馈报错,提示不能修改超过一个表的数据。

    因此,可以通过视图插入数据,但是只能基于一个基础表进行插入,不能跨表更新数据。

    • (3)WITH CHECK OPTION
      如果在创建视图的时候制定了“WITH CHECK OPTION”,那么更新数据时不能插入或更新不符合视图限制条件的记录。

      eg:对表product创建一个单价超过3000的视图,并加上“WITH CHECK OPTION”,之后插入一个价格为42的记录:

      “WITH CHECK OPTION”

      可以看到系统提示错误CHECK OPTION FAILED。因为视图限制了价格要高于3000.
      后面再次尝试了不加“WITH CHECK OPTION”的视图,后者可以成功插入。

      同样的,在不加“WITH CHECK OPTION”的情况下,通过视图修改记录,也可以成功执行:
      修改记录

    通过视图修改,可能导致数据无故消失,因此:

    没有特殊的理由,建议加上“WITH CHECK OPTION”命令。

    注意点:
    1. 视图不是表,不直接存储数据,是一张虚拟的表;
    2. 一般情况下,在创建有条件限制的视图时,加上“WITH CHECK OPTION”命令。

    展开全文
  • 我们从一个结果集中查询信息一般都是select * ...创建视图的命令为:createview视图名称as(select语句)更新视图的命令为:(如果包含聚合函数等是无法修改值的,也就是说计算过后的值),更新操作会同步通新原表数据updat...

    我们从一个结果集中查询信息一般都是select *  from (select...),每次都要编写from (select...)非常麻烦,于是我们将结果集保存起来,这就是视图的便利。

    创建视图的命令为:create   view   视图名称    as    (select 语句)

    更新视图的命令为:(如果包含聚合函数等是无法修改值的,也就是说计算过后的值),更新操作会同步通新原表数据update   goods     set   字段=值

    删除视图的命令为:drop     view if exists 视图名称

    视图的作用:

    (1).权限控制:例如我们只允许查询到商品表中的id,名称,价格,使用视图后查询视图表goods是无法查看到原表shop_goods的其他字段的

    create  view   goods    as   select  id,name,price  from   shop_goods

    select *  from   goods;

    (2).简化复杂的查询:例如select *  from (select....)多层嵌套,使用视图更快更方便;视图保存在information_schema库中,并不会因为mysql重启等原因失效.

    展开全文
  • 文章目录什么是视图视图的特性视图的作用创建视图修改视图删除视图视图机制替换式具化式替换式与具化式区别视图不可更新部分 什么是视图 视图是一个虚拟表,其内容由查询定义。 同真实的表一样,视图包含系列带有...
  • 我们在office软件里使用Word编辑图片时,文档里有特别多图片这时需要进行尺寸修改,倘若一个文档里有几百张图片,一张一张进行调整工作量是巨大,下面说下用宏命令对word里图片尺寸进行批量快速处理调整方法...
  • 视图包含下列结构是不可以更新

    千次阅读 2016-07-16 19:32:03
    数据库设计里,视图(View)可以使得我们为一个或多个数据表定义一个特殊表现形式,视图在行为上与数据表没啥特别区别,可以使用基本select,insert,update等命令修改数据,但对于update操作,也有一些限制,下面...
  • 今天学习创建视图,用的是scott,但是最开始默认scott是没有创建视图的权限的,视频课中讲的是通过Oracle Enterprise Manager Console这软件设置,但我没有安装,百度之后发现也可以通过SQLPLUS命令框进行设置。...
  • 我们在office软件里使用Word编辑图片时,文档里有特别多图片这时需要进行尺寸修改,倘若一个文档里有几百张图片,一张一张进行调整工作量是巨大,下面说下用宏命令对word里图片尺寸进行批量快速处理调整方法...
  • Vue是近年出的一个前端构建数据驱动的web界面的库,主要的特色是响应式的数据绑定,区别于以往的命令式用法。也就是在var a=1;的过程中,拦截’=’的过程,从而实现更新数据,web视图也自动同步更新的功能。而...
  • Oracle视图

    2017-01-23 17:38:10
    视图:虚表,是一个命令的查询,用于改变基表数据显示,简化查询;访问方式与表相同,同样可使用查询语句。 视图特点: 简化查询(把复杂SQL语句写成视图,别人直接用视图来查询即可,无须再写复杂SQL语句)...
  • 上一篇文章《Mybatis源码之SqlSession》聊到了SqlSession其实是一个包工头儿,揽了活自己不干都安排给了执行器;而且在《Mybatis源码之SQL执行过程》中已经了解到,执行器通过对StatementHandler生命周期调度与...
  • 修改、查询、删除视图的命令跟建表时的一样。视图是从一个或多个表(或视图)导出的表。视图是数据库的用户使用数据库的观点。可以根据他们的不同需求,在物理的数据库上定义他们对数据库所要求的数据结构,这种根据...
  • 数据库视图

    2019-10-06 11:51:10
    同真实的表一样,都有系列的带名称的列数据和行数据,视图的数据变化会影响基表数据的变化,基表的数据变化也会影响视图的数据变化 视图的特性 简单性 看到的就是我们需要的; 安全性 通过视图,用户只能查询和...
  • MySQL数据库视图

    2016-08-30 21:05:06
    修改、查询、删除视图的命令跟建表时的一样。视图是从一个或多个表(或视图)导出的表。视图是数据库的用户使用数据库的观点。可以根据他们的不同需求,在物理的数据库上定义他们对数据库所要求的数据结构,这种...
  • MySQL——视图

    2020-12-23 17:10:42
    一张虚表,和真实表一样。...经常被使用查询可以制作成一个视图 安全性:通过视图用户只能查询和修改所能见到数据,数据库中其他数据既看不见也取不到。数据库授权命令可以让每个用户对数据
  • 修改、查询、删除视图的命令跟建表时的一样。视图是从一个或多个表(或视图)导出的表。视图是数据库的用户使用数据库的观点。可以根据他们的不同需求,在物理的数据库上定义他们对数据库所要求的数据结构,这种根据...
  • 数据库——视图

    热门讨论 2014-08-10 19:59:28
     视图是虚表,是从一个或几个基本表(或视图)中导出的表,在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。 为什么用视图:  视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常...
  • 用SQL命令修改表字段

    千次阅读 2012-02-27 09:51:07
    sp_rename 是一个功能丰富存储过程,能够对 表、视图、列、存储过程、触发器、默认值、数据库、对象或规则进行重命名,并且保证不丢失数据。 下例将TB_MoneyPay_PJApply表中字段PayMoney修改为PaidCash: EXEC...
  • sp_rename 是一个功能丰富存储过程,能够对 表、视图、列、存储过程、触发器、默认值、数据库、对象或规则进行重命名,并且保证不丢失数据。 下例将TB_MoneyPay_PJApply表中字段PayMoney修改为PaidCash: ...
  • MYSQL视图(view)

    2020-12-22 16:53:07
    视图 一张虚表,和真实表一样。视图包含一系列带有名称行和...经常被使用查询可以制作成一个视图 2.安全性:通过视图用户只能查询和修改所能见到数据,数据库中其他数据既看不见也取不到。数据库授权命令可以
  • 灵活演示者 轻松地为您Inertia视图...该软件包包括一个artisan命令,用于创建一个演示者: php artisan make:presenter PostsPresenter 该演示者将具有App\Presenters命名空间,并将保存在app/Presenters
  • 视图---一个视图实际上就是封装了一条复杂的查询语句 b. 语法---create view 视图名称 as 子查询---此时的子查询表示一条非常复杂的语句 c. 查询视图就像查询表一样直接对视图进行查询操作 d. 想要更改视图的...
  • Mysql学习之——视图

    2017-09-13 22:57:57
    视图是一个虚拟表,是从数据库中一个或多个表中到出来的表。视图还可以从已经存在的视图的基础上定义。 视图的作用 1.简单化 将那些被经常使用查询的定义为视图,从而使得用户不必为以后的操作每次指定全部的...
  • sp_rename 是一个功能丰富存储过程,能够对 表、视图、列、存储过程、触发器、默认值、数据库、对象或规则进行重命名,并且保证不丢失数据。 下例将TB_MoneyPay_PJApply表中字段PayMoney修改为PaidCash: ...
  • 对数据库操作可以基本归结为对数据对象操作,常常用CREATE命令进行创建,可以使用ALTER命令修改,用DROP执行删除操作等。 、表 表相当于转载数据容器,当一张表建立好之后如果需要修改容器结构就要...
  • 同义词(Synonym)是数据库对象的一个别名,Oracle 可以为表、视图、序列、过程、函数、程序包等指定一个别名。同义词有两种类型: 私有同义词:拥有 CREATE SYNONYM 权限用户(包括非管理员用户)即可创建私有同
  • MySQL -- 视图

    2010-06-19 21:10:00
    本文讲述MySql5.x中视图的使用,包括创建视图、修改视图和删除视图的相关知识,包括命令的语法、使用举例以及注意事项。 一. 视图概述  视图是一个虚拟表,其内容由查询定义。同真实的表一样,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 641
精华内容 256
关键字:

修改一个视图的命令是