mysql视图

视图

  • 介绍

    视图(View) 是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成。

    通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在这条SQL语句查询上

视图的增删改查

  • 创建

    1. 语法 (被[]括起来表示可省略)

      CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH [CASCADED |LOCAL] CHECK OPTION]
      
    2. 案例

      CREATE OR REPLACE VIEW v2 (id,salary) AS SELECT employee_id,salary FROM employees LIMIT 10;
      
  • 修改

    1. 语法

      ALTER VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH[CASCADED |LOCAL] CHECK OPTION]
      
  • 删除

    1. 语法

      DROP VIEW [IF EXISTS] 视图名称 [,视图名称]......
      

视图的检查选项

当创建视图时,如果没有加上检查选项,即 with [CASCADED | LOCAL] check option,那么对视图进行增删改查操作时,就不会检查这些操作是否违背了视图创建时的定义

  • 事例1

    视图的创建 (创建视图v1,条件为employees表中薪资大于等于8000的人)

    CREATE OR REPLACE VIEW v1 AS SELECT * FROM employees WHERE salary >=8000;
    

    往v1中添加数据

    inster into v1 values(1,5000)
    

    会发现这条插入语句能执行成功,这显然违背了视图v1创建时的定义 where salary >= 8000,但是视图v1并不会真正的把这条数据插入到视图v1中

  • 事例2

    创建视图 v1 ,并带上检查选项

    CREATE OR REPLACE VIEW v1 AS SELECT * FROM employees WHERE salary >=8000 with check option;
    

    往v1中添加数据

    inster into v1 values(1,5000);
    

    会发现这条语句会执行失败,应为当创建视图并指定检查选项,那么对视图进行插入或修改操作时,如果违背了视图创建时的定义,则sql语句会执行失败。

CASCADED 和 LOCAL

CASCADED

当创建视图并添加检查选项时,检查选项默认时 CASCADED 的

视图不仅可以依赖表创建,也可以依赖其他视图创建,当视图是依赖其他视图创建时,往子视图添加或修改数据时会依次往上判断是否满足检查选项(无论上层视图是否有 with check option)

  • 创建视图

    create view v1 as select id,salary from employees where salary < 15000;
    create view v2 as select id,salary from employees where salary >10000;
    create view v3 as select id,salary from employees where id < 50 with cascaded check option;
    create view v4 as select id,salary from employees where id >= 10 and salary < 14000;
    

    执行插入语句

    #插入第一条数据,满足所有条件
    mysql> insert into v4 values(12,12000);
    Query OK, 1 row affected (0.00 sec)
    
    #插入第二条数据,不满足v4,其他都满足
    mysql> insert into v4 values(1,12000);
    Query OK, 1 row affected (0.00 sec)
    
    #插入第三条数据,不满足v3
    mysql> insert into v4 values(50,12000);
    ERROR 1369 (HY000): CHECK OPTION failed 'surpass.v4'
    
    #插入第四条数据,满足v3,不满足v2。
    mysql> insert into v4 values(10,9000);
    ERROR 1369 (HY000): CHECK OPTION failed 'surpass.v4'
    
    #插入第五条数据,满足v3、v2,不满足v1
    mysql> insert into v4 values(20,20000);
    ERROR 1369 (HY000): CHECK OPTION failed 'surpass.v4'
    

LOCAL

与CASCADED 的区别在于,依次往上的过程中,如果有视图在创建时没有添加 with [cascaded | local] check option 则不去判断是否满足检查选择

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值