博客
关于我
mysql 视图,视图更新删除
阅读量:797 次
发布时间:2023-02-11

本文共 2071 字,大约阅读时间需要 6 分钟。

数据库视图详解

什么是视图?视图的作用

视图(View)是一种虚拟表,是一个逻辑表,本身并不存储数据。视图通过SELECT语句保存在数据库中,用于从多个表中动态生成所需的数据。视图可以限制数据的访问权限,提高数据安全性,同时简化数据查询。

视图的主要作用包括:

  • 数据过滤:视图可以过滤基表中的数据,仅显示符合特定条件的记录。
  • 数据安全:通过视图,用户只能访问特定的数据,避免了直接访问底表的风险。
  • 数据独立性:视图屏蔽了底表的结构变化,对用户无需任何修改。
  • 为什么要使用视图?

  • 简化管理:使用视图,用户无需关心底表的结构和关联条件,直接看到过滤后的结果。
  • 安全性:视图可以限制访问特定字段的权限,提供更细粒度的数据控制。
  • 灵活性:视图可以根据需求动态调整,适应数据结构的变化。
  • 创建视图

    基本语法

    CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
    • OR REPLACE:可选参数,表示替换已有视图。
    • ALGORITHM:定义视图处理算法,默认为UNDEFINED,MySQL自动选择合适算法。
      • UNDEFINED:MySQL自动选择合适算法。
      • MERGE:合并内部存储。
      • TEMPTABLE:使用临时表存储结果。
    • select_statement:定义视图的SELECT语句。
    • WITH [CASCADED | LOCAL] CHECK OPTION:定义视图更新时的约束条件,默认为CASCADED。

    示例

    -- 创建单表视图CREATE VIEW v_F_players AS SELECT PLAYERNO, NAME, SEX, PHONENO FROM PLAYERS WHERE SEX = 'F' WITH CHECK OPTION;-- 创建多表视图CREATE VIEW v_match AS SELECT a.PLAYERNO, a.NAME, MATCHNO, WON, LOST, c.TEAMNO, c.DIVISION FROM PLAYERS a, MATCHES b, TEAMS c WHERE a.PLAYERNO = b.PLAYERNO AND b.TEAMNO = c.TEAMNO;

    查看视图

    查看视图定义

    SHOW CREATE VIEW v_F_players;

    查看视图信息

    SELECT * FROM information_schema.views WHERE TABLE_NAME = 'v_F_players';

    修改视图

    使用CREATE OR REPLACE

    CREATE OR REPLACE VIEW v_student AS SELECT * FROM student;

    使用ALTER语句

    ALTER VIEW v_student AS SELECT * FROM student;

    DML操作与视图

    更新操作

    UPDATE v_student SET NAME = '钱六' WHERE PLAYERNO = 1;

    注意事项

    • 视图支持更新的条件包括:
      • 基表没有非空约束。
      • 视图不包含聚合函数、DISTINCT、GROUP BY、ORDER BY等。

    删除视图

    DROP VIEW [IF EXISTS] v_student;

    WITH CHECK OPTION约束

    示例

    CREATE VIEW v_veterans AS SELECT * FROM PLAYERS WHERE BIRTH_DATE < '1960-01-01' WITH CHECK OPTION;

    嵌套视图

    CREATE VIEW v_ear_veterans AS SELECT * FROM v_veterans WHERE JOINED < 1980WITH CHECK OPTION;

    视图的其他选项

    ALGORITHM选项

    • UNDEFINED:MySQL自动选择算法。
    • MERGE:合并内部存储。
    • TEMPTABLE:使用临时表存储结果。

    SQL SECURITY选项

    • DEFINER:定义视图的用户。
    • INVOKER:访问视图的用户。

    视图查询

    示例

    SELECT playerno FROM cost_raisers WHERE TOWN = 'Stratford';

    视图更新规则

    可更新视图的条件

  • 视图基于单一基表。
  • 视图不包含聚合函数、表达式或函数。
  • 视图不包含复杂子句。
  • 不可更新视图的条件

  • 视图包含聚合函数或复杂子句。
  • 视图基于多个基表。
  • 视图包含表达式或函数。
  • 总结

    视图是数据库开发中的重要工具,通过定义视图可以简化数据访问,提高安全性和数据一致性。正确使用视图需要理解其优缺点,并根据具体需求进行合理设计。

    转载地址:http://gbbfk.baihongyu.com/

    你可能感兴趣的文章
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>
    Mysql 分页语句 Limit原理
    查看>>
    MySQL 创建新用户及授予权限的完整流程
    查看>>
    mysql 创建表,不能包含关键字values 以及 表id自增问题
    查看>>
    mysql 删除日志文件详解
    查看>>
    mysql 判断表字段是否存在,然后修改
    查看>>
    mysql 协议的退出命令包及解析
    查看>>
    mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
    查看>>
    mysql 多个表关联查询查询时间长的问题
    查看>>
    mySQL 多个表求多个count
    查看>>
    mysql 多字段删除重复数据,保留最小id数据
    查看>>
    MySQL 多表联合查询:UNION 和 JOIN 分析
    查看>>
    MySQL 大数据量快速插入方法和语句优化
    查看>>