博客
关于我
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/

    你可能感兴趣的文章
    MSCRM调用外部JS文件
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    MsEdgeTTS开源项目使用教程
    查看>>
    msf
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL数据库迁移到Oracle(二)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse更改项目名web发布名字不改问题
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>
    mt-datetime-picker type="date" 时间格式 bug
    查看>>
    myeclipse的新建severlet不见解决方法
    查看>>
    MyEclipse设置当前行背景颜色、选中单词前景色、背景色
    查看>>
    Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
    查看>>
    myeclipse配置springmvc教程
    查看>>
    MyEclipse配置SVN
    查看>>