视图

  • 本节例子中用到的表结构:
  • 1.视图概述
  • 2.创建或者修改视图
  • 3.查看视图
  • 4.删除视图

本节例子中用到的表结构:

create database demo_01 default charset=utf8mb4;use demo_01;CREATE TABLE `city` (
`city_id` int(11) NOT NULL AUTO_INCREMENT,
`city_name` varchar(50) NOT NULL,
`country_id` int(11) NOT NULL,
PRIMARY KEY (`city_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `country` (
`country_id` int(11) NOT NULL AUTO_INCREMENT,
`country_name` varchar(100) NOT NULL,
PRIMARY KEY (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into `city` (`city_id`, `city_name`, `country_id`) values(1,'西安',1);
insert into `city` (`city_id`, `city_name`, `country_id`) values(2,'NewYork',2);
insert into `city` (`city_id`, `city_name`, `country_id`) values(3,'北京',1);
insert into `city` (`city_id`, `city_name`, `country_id`) values(4,'上海',1);insert into `country` (`country_id`, `country_name`) values(1,'China');
insert into `country` (`country_id`, `country_name`) values(2,'America');
insert into `country` (`country_id`, `country_name`) values(3,'Japan');
insert into `country` (`country_id`, `country_name`) values(4,'UK');

city表(使用查询语句select * from city;)
这里city_id是主键,非空自增。country_id是外键

+---------+-----------+------------+
| city_id | city_name | country_id |
+---------+-----------+------------+
|       1 | 西安      |          1 |
|       2 | NewYork   |          2 |
|       3 | 北京      |          1 |
|       4 | 上海      |          1 |
+---------+-----------+------------+

country表(使用查询语句select * from country;)
country_id是主键非空自增。

+------------+--------------+
| country_id | country_name |
+------------+--------------+
|          1 | China        |
|          2 | America      |
|          3 | Japan        |
|          4 | UK           |
+------------+--------------+

1.视图概述

视图(View)是一种虚拟存在的表。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表, 并且是在使用视图时动态生成的。通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视 图的时候,主要的工作就落在创建这条SQL查询语句上。
视图相对于普通的表的优势主要包括以下几项。

  • 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤 好的复合条件的结果集。
  • 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但 是通过视图就可以简单的实现。
  • 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表 修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

2.创建或者修改视图

创建视图的语法为:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]

例:我们有两个表city和country表(文章前面已经给出),其中country_id是city表的外键。我们想展示国家和城市之间的信息。所以需要使用到连接查询

select c.*,t.country_name  from city c,country t where c.country_id=t.country_id;
+---------+-----------+------------+--------------+
| city_id | city_name | country_id | country_name |
+---------+-----------+------------+--------------+
|       1 | 西安      |          1 | China        |
|       3 | 北京      |          1 | China        |
|       4 | 上海      |          1 | China        |
|       2 | NewYork   |          2 | America      |
+---------+-----------+------------+--------------+
mysql> create view view_city_country as select c.*,t.country_name  from city c,country t where c.country_id=t.country_id;
Query OK, 0 rows affected (0.05 sec)

创建视图成功
此时视图相当于一张虚拟的表,怎么操作基本表,就怎么操作视图。

mysql> update view_city_country set city_name='西安市' where city_id =1;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from view_city_country;
+---------+-----------+------------+--------------+
| city_id | city_name | country_id | country_name |
+---------+-----------+------------+--------------+
|       1 | 西安市    |          1 | China        |
|       3 | 北京      |          1 | China        |
|       4 | 上海      |          1 | China        |
|       2 | NewYork   |          2 | America      |
+---------+-----------+------------+--------------+
4 rows in set (0.00 sec)

此时基本表的数据也被更新了。

+---------+-----------+------------+
| city_id | city_name | country_id |
+---------+-----------+------------+
|       1 | 西安市    |          1 |
|       2 | NewYork   |          2 |
|       3 | 北京      |          1 |
|       4 | 上海      |          1 |
+---------+-----------+------------+

虽然视图能够更新,但是不建议更新视图
修改视图的语法为:

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]
选项 :
WITH [CASCADED | LOCAL] CHECK OPTION
决定了是否允许更新数据使记录不再满足视图的条件。        LOCAL : 只要满足本视图的条件就可以更新。    CASCADED : 必须满足所有针对该视图的所有视图的条件才可以更新。 默认值.

3.查看视图

从 MySQL 5.1 版本开始,使用 SHOW TABLES 命令的时候不仅显示表的名字,同时也会显示视图的名字,而不存 在单独显示视图的 SHOW VIEWS 命令。

mysql> show tables;
+-------------------+
| Tables_in_demo_01 |
+-------------------+
| city              |
| country           |
| view_city_country |
+-------------------+
3 rows in set (0.00 sec)

如果需要查询某个视图的定义,可以使用 SHOW CREATE VIEW 命令进行查看 :

mysql> show create view view_city_country;
+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View              | Create View                                                                                                                                                                                                                                                                                                                    | character_set_client | collation_connection |
+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| view_city_country | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_city_country` AS select `c`.`city_id` AS `city_id`,`c`.`city_name` AS `city_name`,`c`.`country_id` AS `country_id`,`t`.`country_name` AS `country_name` from (`city` `c` join `country` `t`) where (`c`.`country_id` = `t`.`country_id`) | utf8                 | utf8_general_ci      |
+-------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.00 sec)

4.删除视图

语法 :

DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT | CASCADE]

示例 , 删除视图city_country_view :

mysql> drop view view_city_country;
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
+-------------------+
| Tables_in_demo_01 |
+-------------------+
| city              |
| country           |
+-------------------+
2 rows in set (0.00 sec)

MySQL高级-视图相关推荐

  1. MySQL数据库进阶系统学习6(MySQL高级-视图-事务-索引-账户管理-主从)

    第六部分: MySQL高级 详细资料参考html文件17 9.1 视图 问题 对于复杂的查询,往往是有多个数据表进行关联查询而得到,如果数据库因为需求等原因发生了改变, 为了保证查询出来的数据与之前相 ...

  2. MySQL 高级 - 视图 - 概述

    视图概述 ​ 视图(View)是一种虚拟存在的表.视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的.通俗的讲,视图就是一条SELECT语句执行后返回的结 ...

  3. MySQL高级-存储过程和函数

    存储过程和函数 1.存储过程和函数概述 2 创建存储过程 3 调用存储过程 4 查看存储过程 5 删除存储过程 6 语法 6.1 变量 6.2 if条件判断 6.3 传递参数 6.4 case结构 6 ...

  4. MySQL高级篇(事务视图存储过程与函数)

    目录 一.事务 1.1什么是事务? 1.2事务的特性 1.3事务的分类 1.4事务的操作步骤 1.5事务的隔离级别(面试题常考) 二.视图 2.1视图的操作 2.1.1视图的创建 2.1.2视图更新( ...

  5. 【Mysql高级语法:视图操作】

    Mysql高级语法- view视图操作-yuweixian4230-ChinaUnix博客

  6. MySQL高级第三章——视图和函数

    学习目标: 了解视图的作用 熟练掌握视图的创建.更新.删除操作 熟练掌握自定义函数的创建和调用 理解函数和过程的区别 学习内容: 1. 视图 2. 函数 学习时间: 2021/2/12 视图 视图简介 ...

  7. MySQL高级 —— 查询性能优化

    引言 承接<MySQL高级 -- 高性能索引>,本篇博客将围绕<高性能MySQL(第三版)>第六章内容进行总结和概括. 与索引的部分一样,SQL优化也是广大程序员深入MySQL ...

  8. MySQL高级(一)

    MySQL高级(一)计划讲解的是索引,视图,存储过程和函数,触发器. 本次是在Linux上安装Mysql服务的,具体的安装连接请参照我的另一篇博客:https://blog.csdn.net/zeng ...

  9. 从前慢-Mysql高级及实战

    Mysql高级及实战 1 Linux 系统安装MySQL 1.1 下载Linux 安装包 https://dev.mysql.com/downloads/mysql/5.7.html#download ...

最新文章

  1. python【力扣LeetCode算法题库】820- 单词的压缩编码
  2. 【对比分析四】position的absolute与fixed共同点与不同点
  3. 按下企业自播“快车键”
  4. 笔记-VUE滚动加载更多数据
  5. 计算机操作系统实验一,计算机操作系统实验一.doc
  6. 垃圾收集算法,垃圾收集器_垃圾收集器准则和提示
  7. ftp可以传输什么类型文件_FTP文件传输工具-ForkLift for Mac
  8. sql azure 语法_如何使用Azure门户,Cloud Shell和T-SQL复制Azure SQL数据库
  9. bread是可数还是不可数_英语语法丨可数名词和不可数名词讲解(上),学英语必学...
  10. java怎么将文件传到服务器,Java文件传到服务器
  11. c# aes解密 java,C#实现的AES加密解密完整实例
  12. 2022读书感第一篇《小王子》
  13. matlab 指数拟合原理,matlab指数增长和阻滞增长拟合代码.doc
  14. 交替打印A1B2C3-Java多线程实现方式
  15. PDF文件JAVA去水印源码,给pdf文件添加防伪水印logo(附工程源码下载)
  16. Go-数字签名详解与Rsa数字签名代码
  17. linux 安装docker简易方法
  18. 双屏是否代表未来 — 灵耀 X2 Pro 产品专访
  19. 维多利亚旅行者 V6004 时尚休闲商务双肩包 黑色[价格 行情 报价] - 易迅网
  20. php 画布旋转,gdip图形库,画布如何进行按照指定的角度进行旋转

热门文章

  1. 全通教育回应深交所:巴九灵年赚7500万 没有吴晓波依然正常运作
  2. sip hold 解决方法【原创】
  3. 一个强大的图表库 -- ECharts
  4. 回调函数(CALLBACK)学习总结
  5. 薏米到底有多强大?真是没想到还能这样吃~
  6. 深入解析MVVM架构
  7. python unittest教程_Python Unittest原理及基本使用方法
  8. python怎么向列表中添加内容_Python中向List添加元素方法
  9. 【maven】maven dependencyManagement 锁定Jar包版本
  10. 【Elasticsearch】es 定期删除 已经删除的数据 物理删除 不是等待段合并