• MySQL-视图


    一、介绍

    MySQL 视图(View)可以理解为是一种虚拟存在的表,表面上看起来和真实表一样。视图是数据库对象之一。

    数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据都存放在定义视图查询所引用的真实表中,本质是来自于一个 select子句。

    使用视图查询数据时,数据库会从真实表中取出对应的数据。因此,视图中的数据是依赖于真实表中的数据的。一旦真实表中的数据发生改变,显示在视图中的数据也会发生改变。

    为什么需要视图?
    答:
    1.假设一张表中有些字段不希望某些用户看见,那么就可以使用视图进行筛选,仅展示可查看的字段,进而保护了表结构。
    2.可以使用视图返回多张表的关联查询结构,对于使用者而言他并不知道这些数据来自多张表,进而简化查询操作。

    二、创建视图

    2.1 基础操作

    创建语法:

    create [or replace] view 视图名 as select .... ;
    
    • 1

    1.准备测试数据

    DROP TABLE IF EXISTS emp;
    CREATE TABLE emp (
      id int(11) PRIMARY KEY AUTO_INCREMENT,
      age int(11) DEFAULT NULL,
      name varchar(50) DEFAULT NULL
    )DEFAULT CHARSET=utf8;
    
    INSERT INTO `emp` VALUES (1, 18, '张三');
    INSERT INTO `emp` VALUES (2, 20, '李四');
    INSERT INTO `emp` VALUES (3, 25, '王五');
    INSERT INTO `emp` VALUES (4, 22, '赵六');
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.创建一个简单视图

    create view v_emp1 as select * from emp;
    
    • 1

    3.创建一个有别名的视图

    create view v_emp2 as select age+10 as my_age from emp;
    
    • 1

    2.2 视图注意事项

    视图本身不存储数据,操作视图就相当于操作视图对应的基表中的数据。

    查询:select * from v_emp1;
    删除:delete from v_emp1 where id=1;            -- 视图和原表数据都会被删除
    修改:update v_emp1 set name='wwb' where id=2;   -- 视图和原表数据都会被修改
    增加:insert into v_emp1 values (5, 11, '666'); -- 视图和原表数据都会增加(一般视图是不建议插入的,会造成原表数据污染)
    
    • 1
    • 2
    • 3
    • 4

    可以为视图加限定条件,从而约束使用者行为:with check option

    create view v_emp3 as select * from emp where age<200 with check option;
    
    • 1

    测试:

    测试插入:
    mysql> insert into v_emp3(age) values(300);
    ERROR 1369 (HY000): CHECK OPTION failed 'v_test.v_emp3'  -- 失败
    
    mysql> insert into v_emp3(age) values(100);   -- 成功
    Query OK, 1 row affected (0.08 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    三、查看视图

    DESC 视图名;               -- 查看视图的字段信息
    
    SHOW CREATE VIEW 视图名;   -- 查看视图的创建信息
    
    • 1
    • 2
    • 3

    四、删除视图

    DROP VIEW <视图名1> [ , <视图名2>]
    
    • 1

    五、修改视图

    ALTER VIEW <视图名> AS <SELECT语句>
    
    • 1
  • 相关阅读:
    关于手机使用中信号强弱 网速快慢 频段的相关常识
    Java面试题之Java集合面试题 50道(带答案)
    STM32MP157 I2C和SPI总线实验
    什么时候使用继承,好莱坞原则(设计模式与开发实践 P11+)
    手把手入门MO | 如何使用SeaTunnel将数据写入MatrixOne
    夜莺日志采集mtail
    前端研习录(32)——JavaScript 基于定时器实现防抖、节流
    阿里云大数据开发三面面经,已过,面试题已配答案
    Python从入门到入土-面向对象
    人物百度百科词条创建教程分享,建议收藏
  • 原文地址:https://blog.csdn.net/weixin_45691611/article/details/127802930