zoukankan      html  css  js  c++  java
  • 视图

    视图

    1.1 概述

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

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

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

    1.2 视图的基本使用

    操作指令代码
    创建视图 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]
    删除视图 DROP VIEW [IF EXISTS] 视图名1

    1.3 创建视图

    创建视图: CREATE VIEW 视图名 AS

     -- 准备一张表
     SET FOREIGN_KEY_CHECKS=0;
     ​
     -- ----------------------------
     -- Table structure for sys_job
     -- ----------------------------
     DROP TABLE IF EXISTS `sys_job`;
     CREATE TABLE `sys_job` (
       `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '岗位ID',
       `name` varchar(255) NOT NULL COMMENT '岗位名称',
       `enabled` bit(1) NOT NULL COMMENT '岗位状态',
       `job_sort` int(5) DEFAULT NULL COMMENT '排序',
       `is_deleted` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '逻辑删除 1(true)已删除, 0(false)未删除',
       `create_time` datetime NOT NULL COMMENT '创建日期',
       `create_by` varchar(20) NOT NULL COMMENT '创建人',
       `update_time` datetime NOT NULL COMMENT '更新时间',
       `update_by` varchar(20) NOT NULL COMMENT '更新人',
       `version` bigint(32) NOT NULL COMMENT '版本',
       PRIMARY KEY (`id`) USING BTREE,
       UNIQUE KEY `uniq_name` (`name`),
       KEY `inx_enabled` (`enabled`)
     ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='岗位';
     ​
     -- ######################################################################
     -- 创建视图
     CREATE VIEW v_job AS 
         SELECT * FROM sys_job;
     ​
     -- 查询结果
     SELECT * FROM v_job;

     

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

    1.4 修改视图

    修改和创建视图可以使用代码 : CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...]

     -- 修改视图(只需要查询id、name)
     CREATE OR REPLACE VIEW v_job AS 
         SELECT id,name FROM sys_job;
         
     -- 查询结果
     SELECT * FROM v_job;

     

    1.5 查看视图

     -- 查看数据库已有视图(可以使用模糊查找)
     SHOW TABLES; -- 得到所有的表和视图
     SHOW TABLES LIKE 'v_%';
     ​
     -- 查看视图详情{(desc 视图名)/(show fields from 视图名)}
     DESC v_job;
     SHOW FIELDS FROM v_job;

    总结: 通过show tables;反馈得到所有的表和视图。同样的,我们可以通过模糊检索的方式专门查看视图,这个时候,视图的命令统一采用v视图名v视图名的优势就体现出来了。

    1.6 视图与数据变更

    1.6.1 表格数据变更

    将表 v_job 中的数据进行更新,在通过视图检索:

     -- 表格数据变更
     UPDATE v_job SET name = '视图修改' WHERE id = 16;
     ​
     SELECT * FROM v_job;

     

    总结:视图不是表,不保存数据,只是一张虚拟表;

    1.6.2 表格数据插入

     

    1.6.3 WITH CHECK OPTION约束

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

    作用:对视图所做的DML操作的结果,不能违反视图的WHERE条件的限制。

    总结:因为违反了视图中的where author_id = 1子句,所以抛出异常; 利用with check option约束限制,保证更新视图是在该视图的权限范围之内。 使用WITH CHECK OPTION约束时,(不指定选项则默认是CASCADED) 可以使用CASCADED或者LOCAL选项指定检查的程度: CASCADED:检查所有的视图,会检查嵌套视图及其底层的视图 LOCAL:只检查将要更新的视图本身,嵌套视图不检查其底层的视图

    1.7 删除视图

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

     DROP VIEW  IF EXISTS  v_job;

     

  • 相关阅读:
    11111 Generalized Matrioshkas
    Uva 442 Matrix Chain Multiplication
    Uva 10815 Andy's First Dictionary
    Uva 537 Artificial Intelligence?
    Uva 340 MasterMind Hints
    SCAU 9508 诸葛给我牌(水泥题)
    Uva 10420 List of Conquests(排序水题)
    Uva 409 Excuses, Excuses!
    10/26
    11/2
  • 原文地址:https://www.cnblogs.com/mmdz/p/15406713.html
Copyright © 2011-2022 走看看