美文网首页
MySQL笔记3:视图

MySQL笔记3:视图

作者: _百草_ | 来源:发表于2023-05-24 10:00 被阅读0次

1、常见的数据库对象

TABLE
数据字典:即系统表?
约束CONSTRAINT:执行数据校验的规则,用于保护数据完整性的规则
视图VIEW:一个或多个数据表里数据的逻辑显示
索引INDEX:用于提高查询性能,相当于书的目录
存储过程PROCEDURE:用于完成一次完整的业务处理,没有返回值,但可通过传出参数将多个值传给调用环境
存储函数FUNCTION:用于完成一次特定的计算,具有一个返回值
触发器TRIGGER:相当于事件监听器,当数据库发生特定事件后,触发器被触发,完成相应的处理

2、视图概况

使用场景:
1.使用表的一部分而不是所有表,查询效率
2.针对不同用户制定不同的查询视图
概念:
1. 虚拟表,本身不具有数据
2. 建立在已有表的基础上,视图赖以建立的这些表称为基表
3. 视图的创建&删除只影响视图本身,不影响视图;视图中数据的增删改则会同步基表
4. 向用户提供基表数据的另一形式;
优点:
1.操作简单:经常将查询操作定义为视图,开发人员可以不关注表与表关联关系、表结构
2.减少数据冗余:本身不存储数据
3.数据安全:用户权限
4.适应多变的需求:视图减少改动的工作量
5.分解复杂查询逻辑
缺点:
基表结构变更,需要及时维护视图,增加维护成本

3、创建视图

CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}]
VIEW 视图名称[(字段列表)]
AS 查询语句
[WITH [CASCADED|LOCAL] CHECK OPTION];

精简版
CREATE VIEW 视图名称 AS 查询语句;
在创建视图时,若没有指定字段列表,则默认与查询语句相同

4、查看视图

mysql> USE test;
Database changed
mysql> SHOW TABLES; # 查看数据库表对象、视图对象
+---------------------------+
| Tables_in_test            |
+---------------------------+
| aaa                       |
| course                    |
| score                     |
| student                   |
| student_course_score_view |
| teacher                   |
+---------------------------+
6 rows in set (0.00 sec)

mysql> DESC student_course_score_view; # 查看视图结构,全称写DESCRIBE
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id          | varchar(10) | NO   |     | NULL    |       |
| studentName | varchar(20) | YES  |     | NULL    |       |
| scoreName   | varchar(10) | NO   |     | NULL    |       |
| score       | int(11)     | NO   |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> DESCRIBE student_course_score_view; # 查看视图结构,简写DESC
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id          | varchar(10) | NO   |     | NULL    |       |
| studentName | varchar(20) | YES  |     | NULL    |       |
| scoreName   | varchar(10) | NO   |     | NULL    |       |
| score       | int(11)     | NO   |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> SHOW TABLE STATUS LIKE student_course_score_view;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'student_course_score_view' at line 1
mysql> SHOW TABLE STATUS LIKE 'student_course_score_view'; # 查看视图的属性信息,注意视图名称前后的引号
+---------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+---------+
| Name                      | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+---------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+---------+
| student_course_score_view | NULL   |    NULL | NULL       | NULL |           NULL |        NULL |            NULL |         NULL |      NULL |           NULL | NULL        | NULL        | NULL       | NULL      |     NULL | NULL           | VIEW    |
+---------------------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+---------+
1 row in set (0.00 sec)

mysql> SHOW CREATE VIEW student_course_score_view; # 查看视图的详细定义信息
+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View                      | Create View                                                                                                                                                                                                                                                                                                                                                                           | character_set_client | collation_connection |
+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| student_course_score_view | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `student_course_score_view` AS (select `s`.`id` AS `id`,`s`.`name` AS `studentName`,`c`.`name` AS `scoreName`,`sc`.`score` AS `score` from ((`student` `s` join `score` `sc` on((`sc`.`student_id` = `s`.`id`))) join `course` `c` on((`c`.`id` = `sc`.`course_id`))) order by `s`.`id`,`sc`.`score`) | utf8mb4              | utf8mb4_general_ci   |
+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.00 sec)

mysql>

5、更新视图数据

一般支持INSERT、UPDATE、DELETE
不可更新的视图:
1.ALGORITHM = TEMPTABLE=>insert、delete均不支持
2.查询语句中使用了JOIN=>insert、delete均不支持
3. 查询语句中,存在数学表达式或DISTINCT、聚合函数、GROUP BYHAVINGUNION等=>insert update delete均不支持
4. 查询语句中包括子查询,且子查询引用了FROM后的表=>insert update delete均不支持
5. 基于一个不可更新视图,如常量视图
6. 视图中不包含基表中所有被定义非空又未指定默认值的列=>insert update delete均不支持
=>不建议针对视图数据修改

mysql> UPDATE student_course_score_view SET score=70 WHERE id='1003'and sorceName='UML';
ERROR 1221 (HY000): Incorrect usage of UPDATE and ORDER BY

6、修改/删除视图结构

  1. CREATE OR REPLACE VIEW ……;可以修改视图
    2.ALTER VIEW 视图名称 AS 查询语句;
  2. DROP VIEW [IF EXISTS] 视图名称;# 删除视图,但不会删除基表的数据
    基于视图a,创建的新视图b,在视图a删除后,视图b需要手动删除或修改,否则无法使用

7、参考

  1. SQL 视图

相关文章

  • mysql视图笔记!

    mysql视图笔记:视图是虚表,实际数据表的映射。实际数据发生变化视图也跟着变化。当查询数据要关联多张表的时候,要...

  • MySQL笔记

    MySQL学习笔记 [toc] 登录和退出MySQL服务器 基本语法 正则表达式 字段拼接 分组 全文搜索 视图 ...

  • 23-MYSQL数据库(二)

    视图 函数 自定义函数 流程控制 触发器 MySQL用户和权限管理 用户管理 小笔记 MySQL权限管理 授权 小...

  • Python MySQL数据库5:MySQL高级知识&账

    总体内容 1、视图 2、事务 3、索引 4、账户管理 5、MySQL主从同步配置 一、视图 1.1、问题?对于复杂...

  • Mysql 学习笔记

    Mysql 学习笔记(四) 视图(View) ➢从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。从...

  • mysql高级:视图、事务、索引

    # mysql高级:视图、事务、索引 * 视图 * 事务 * 索引 * 账户管理 * 主从 ## 1.视图 动态抽...

  • MySQL--索引

    MySQL索引 查看索引 创建索引 创建唯一索引 创建主键索引 删除索引 删除主键 MySQL视图 创建视图 删除...

  • mysql视图,触发器,存储过程优缺点及应用分析

    mysql视图,触发器,存储过程优缺点及应用分析 视图 mysql使用较少,是sql server和orcale使...

  • 数据库

    一、MySQL中视图与表的区别 1.1 MySQL中视图和表的区别以及联系 视图是已经编译好的SQL语句,是基于S...

  • MySQL数据库基本操作(上)

    史上最简单的 MySQL 教程>>>MySQL运行机制原理&架构>>>触发器视图(上)视图(下)数据备份与还原(上...

网友评论

      本文标题:MySQL笔记3:视图

      本文链接:https://www.haomeiwen.com/subject/cxvfedtx.html