博客
关于我
mysql 视图,视图更新删除
阅读量:796 次
发布时间: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 slave 停了_slave 停止。求解决方法
    查看>>
    MySQL slow_query_log慢查询日志配置详解
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    MYSQL sql语句针对数据记录时间范围查询的效率对比
    查看>>
    mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
    查看>>
    mysql sysbench测试安装及命令
    查看>>
    mysql Timestamp时间隔了8小时
    查看>>
    mysql tinyint 1 boolean,MySQL tinyint to boolean
    查看>>
    Mysql tinyint(1)与tinyint(4)的区别
    查看>>
    MySQL Troubleshoting:Waiting on query cache mutex
    查看>>
    mysql union orderby 无效
    查看>>
    mysql v$session_Oracle 进程查看v$session
    查看>>
    mysql VS mongoDB
    查看>>
    mysql vue 菜谱_Vue+MySQL实现购物车的增删改查
    查看>>
    mysql where中如何判断不为空
    查看>>
    mysql where中如何判断不为空
    查看>>
    MySQL Workbench 使用手册:从入门到精通
    查看>>
    MySQL Workbench 数据库建模详解:从设计到实践
    查看>>
    MySQL Workbench 数据建模全解析:从基础到实践
    查看>>
    mysql workbench6.3.5_MySQL Workbench
    查看>>