视图

视图语法

  1. -- 创建视图
  2. CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [
  3. CASCADED | LOCAL ] CHECK OPTION ]
  4. -- 查询视图
  5. 查看创建视图语句:SHOW CREATE VIEW 视图名称;
  6. 查看视图数据:SELECT * FROM 视图名称 ...... ;
  7. -- 修改视图
  8. 方式一:CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH
  9. [ CASCADED | LOCAL ] CHECK OPTION ]
  10. 方式二:ALTER VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED |
  11. LOCAL ] CHECK OPTION ]
  12. -- 删除视图
  13. DROP VIEW [IF EXISTS] 视图名称 [,视图名称] ...

检查选项

当使用 WITH CHECK OPTION 子句创建视图时,MySQL 会通过视图检查正在更改的每个行,例如 插入,更新,删除,以使其符合视图的定义。 MySQL 允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,mysql 提供了两个选项: CASCADED 和 LOCAL,默认值为 CASCADED 。

1、ASCADED 级联。
比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 cascaded,但是v1视图创建时未指定检查选项。 则在执行检查时,不仅会检查v2,还会级联检查v2的关联视图v1。
image.png

2、LOCAL 本地。
比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 local ,但是v1视图创建时未指定检查选项。 则在执行检查时,知会检查v2,不会检查v2的关联视图v1。
image.png

视图的更新

要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新:
A. 聚合函数或窗口函数(SUM()、 MIN()、 MAX()、 COUNT()等)
B. DISTINCT
C. GROUP BY
D. HAVING
E. UNION 或者 UNION ALL

视图作用

1、简单
视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
2、安全
数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据
3、数据独立
视图可帮助用户屏蔽真实表结构变化带来的影响。

存储过程

介绍

存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
image.png

特点:

  • 封装,复用 ———————————-> 可以把某一业务SQL封装在存储过程中,需要用到的时候直接调用即可。
  • 可以接收参数,也可以返回数据 ————> 再存储过程中,可以传递参数,也可以接收返回值。
  • 减少网络交互,效率提升 ——————-> 如果涉及到多条SQL,每执行一次都是一次网络传输。 而如果封装在存储过程中,我们只需要网络交互一次可能就可以了。

    触发器

    概述

    触发器是与表有关的数据库对象,指在 insert/update/delete 之前 (BEFORE) 或之后(AFTER),触发并执行触发器中定义的 SQL 语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性, 日志记录 , 数据校验等操作 。
    使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。
    image.png

    语法

    ```sql — 创建 CREATE TRIGGER trigger_name BEFORE/AFTER INSERT/UPDATE/DELETE ON tbl_name FOR EACH ROW — 行级触发器 BEGIN trigger_stmt ; END;

— 查看 SHOW TRIGGERS ;

— 删除 DROP TRIGGER [schema_name.]trigger_name ; — 如果没有指定 schema_name,默认为当前数 据库 。 ```