OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4400|回复: 1

mysql---视图(收藏防迷路)

[复制链接]

143

主题

145

帖子

0

精华

高级会员

Rank: 4

积分
585
金钱
585
注册时间
2020-5-25
在线时间
42 小时
发表于 2020-12-23 17:12:54 | 显示全部楼层 |阅读模式
一、定义
  视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索 数据的查询。
二、语法 
[url=][/url]
CREATE    [OR REPLACE]    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]    [DEFINER = user]    [SQL SECURITY { DEFINER | INVOKER }]    VIEW view_name [(column_list)]    AS select_statement    [WITH [CASCADED | LOCAL] CHECK OPTION][url=][/url]

三、使用示例
[url=][/url]
mysql> create table test_rank(id int, score int);Query OK, 0 rows affected (0.16 sec)mysql> insert into test_rank values(1, 10), (2, 20), (3, 30), (4, 30), (5, 40), (6, 40);Query OK, 6 rows affected (0.05 sec)Records: 6  Duplicates: 0  Warnings: 0mysql> select * from test_rank;+------+-------+| id   | score |+------+-------+|    1 |    10 ||    2 |    20 ||    3 |    30 ||    4 |    30 ||    5 |    40 ||    6 |    40 |+------+-------+6 rows in set (0.00 sec)---- 创建视图--mysql> create view view_rank as select * from test_rank;  -- 针对上面的test_rank创建一个视图Query OK, 0 rows affected (0.03 sec)-- 也可以对select结果增加条件进行过滤后,再创建视图mysql> show create table test_rank\G*************************** 1. row ***************************       Table: test_rankCreate Table: CREATE TABLE `test_rank` (    -- 得到的是表结构  `id` int(11) DEFAULT NULL,  `score` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb41 row in set (0.00 sec)mysql> show create table view_rank\G  -- 他是以一张表的形式存在的,可通过show tables看到*************************** 1. row ***************************                View: view_rank         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_rank` AS select `test_rank`.`id` AS `id`,`test_rank`.`score` AS `score` from `test_rank`                      -- 和真正的表不同的是,这里show出来的是视图的定义character_set_client: utf8collation_connection: utf8_general_ci1 row in set (0.00 sec)mysql> select * from view_rank;  -- 可以直接查询该视图得结果+------+-------+| id   | score |+------+-------+|    1 |    10 ||    2 |    20 ||    3 |    30 ||    4 |    30 ||    5 |    40 ||    6 |    40 |+------+-------+6 rows in set (0.00 sec)-- 视图的作用是,可以对开发人员是透明的,可以隐藏部分关键的列-- 视图在mysql是虚拟表。根据视图的定义,还是去执行定义中的select语句。-- 只开放部分列mysql> create view view_rank_1 as select id from test_rank; -- 只开放id列Query OK, 0 rows affected (0.04 sec)mysql> select * from view_rank_1;  -- 即使 select * ,也只能看到id列,具有隐藏原来表中部分列的功能                        +------+| id   |+------+|    1 ||    2 ||    3 ||    4 ||    5 ||    6 |+------+6 rows in set (0.00 sec)-- 不要取用select * from 去创建视图,因为mysql会把*逐个解析成列。-- 当原来的表结构发生变化时,视图的表结构是不会发生变化的,视图在创建的瞬间,便确定了结构。-- 比如,当你alter原来的表 增加列(add columns)时,再去查询该视图,新增加的列是不存在的。mysql> alter table test_rank add column  c int default 0; -- 增加一列名字为c,默认值为0Query OK, 0 rows affected (0.30 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> select * from test_rank;  -- 查询原表,新的列c出现了+------+-------+------+| id   | score | c    |+------+-------+------+|    1 |    10 |    0 ||    2 |    20 |    0 ||    3 |    30 |    0 ||    4 |    30 |    0 ||    5 |    40 |    0 ||    6 |    40 |    0 |+------+-------+------+6 rows in set (0.00 sec)mysql> select * from view_rank; -- 尽管view_rank用select * 创建,但当时没有列c,所以无法得到c列的值+------+-------+| id   | score |+------+-------+|    1 |    10 ||    2 |    20 ||    3 |    30 ||    4 |    30 ||    5 |    40 ||    6 |    40 |+------+-------+6 rows in set (0.00 sec)[url=][/url]

视图的算法
通过 show create table 命令查看视图定义的时候,可以看到一个字段:ALGORITHM,这个是用来定义视图算法的,视图的算法(ALGORITHM)有三种方式:
  • UNDEFINED:默认方式,由 MySQL 来判断使用下面的哪种算法。
  • MERGE:每次通过物理表查询得到结果,把结果 MERGE(合并)起来返回。
  • TEMPTABLE:产生一张临时表,把数据放入临时表后,客户端再去临时表取数据(不会缓存)。
TEMPTABLE 特点:即使访问条件一样,第二次查询还是会去读取物理表中的内容,并重新生成一张临时表,并不会取缓存之前的表。(临时表是 Memory 存储引擎,默认放内存,超过配置大小放磁盘)。
当查询有一个较大的结果集时,使用 TEMPTABLE 可以快速的结束对该物理表的访问,从而可以快速释放这张物理表上占用的资源。然后客户端可以对临时表上的数据做一些耗时的操作,而不影响原来的物理表。
所以一般我们使用 UNDEFINED,由 MySQL 自己去判断。

参考文本

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4471
金钱
4471
注册时间
2013-4-22
在线时间
335 小时
发表于 2020-12-23 20:38:29 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 12:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表