问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么情况下使用mysql 视图

发布网友 发布时间:2022-04-29 20:52

我来回答

2个回答

懂视网 时间:2022-04-30 01:13

  视图即是虚拟表,也称为派生表,因为它们的内容都派生自其它表的查询结果。虽然视图看起来感觉和基本表一样,但是它们不是基本表。基本表的内容是持久的,而视图的内容是在使用过程中动态产生的。——摘自《SQLite权威指南》


使用视图的优点:

 1.可靠的安全性
 2.查询性能提高
 3.有效应对灵活性的功能需求
 4.轻松应对复杂的查询需求


视图的基本使用:

创建:

例如我们本身有一个这样的基本表:

mysql> select * from students;
+------+----------------+-------+
| id   | name           | age   |
+------+----------------+-------+
|    1 | bumblebee      |   200 |
|    1 | king of monkey | 10000 |
+------+----------------+-------+

那么就可以像这样来创建一个视图:

CREATE VIEW stu_view AS SELECT name FROM students;

Query OK, 0 rows affected (0.01 sec)

创建完一个视图,可以通过查看数据库中的全部数据表来查看:

mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| stu_view          |
| students          |
+-------------------+
2 rows in set (0.00 sec)

可以看到当前数据库中已经把刚刚创建的视图放进数据库的表集合中了。因为视图也是一种表,是虚拟表。


查询:

视图的查询和基本表的查询一样,因为视图也是一种数据表,所以你可以像这样的来查询它

mysql> select * from stu_view;
+----------------+
| name           |
+----------------+
| bumblebee      |
| king of monkey |
+----------------+


删除:

DROP VIEW stu_view;

删除之后可以再次查询进行验证:

mysql> select * from stu_view;
ERROR 1146 (42S02): Table ‘student.stu_view‘ doesn‘t exist


接下来我们看看如果我们变动了原始的基本表,视图会有什么改变:

mysql> INSERT INTO students(id, name, age) VALUES (2, ‘Zeus‘, 100000);
Query OK, 1 row affected (0.00 sec)

检查基本表:

mysql> SELECT * FROM students;
+------+----------------+--------+
| id   | name           | age    |
+------+----------------+--------+
|    1 | bumblebee      |    200 |
|    1 | king of monkey |  10000 |
|    2 | Zeus           | 100000 |
+------+----------------+--------+
3 rows in set (0.00 sec)

检查视图:

mysql> SELECT * FROM stu_view;
+----------------+
| name           |
+----------------+
| bumblebee      |
| king of monkey |
| Zeus           |
+----------------+
3 rows in set (0.00 sec)


更新:

mysql> CREATE VIEW stu_view2 AS SELECT id, name FROM students;
Query OK, 0 rows affected (0.01 sec)

验证:

mysql> select * from stu_view2;
+------+----------------+
| id   | name           |
+------+----------------+
|    1 | bumblebee      |
|    1 | king of monkey |
|    2 | Zeus           |
+------+----------------+
3 rows in set (0.00 sec)

更新视图:

mysql> UPDATE stu_view2 SET name=‘Medusa‘  WHERE id=2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

检查视图更新结果:

mysql> SELECT * FROM stu_view2;
+------+----------------+
| id   | name           |
+------+----------------+
|    1 | bumblebee      |
|    1 | king of monkey |
|    2 | Medusa         |
+------+----------------+
3 rows in set (0.00 sec)

检查基本表更新结果:

mysql> SELECT * FROM students;
+------+----------------+--------+
| id   | name           | age    |
+------+----------------+--------+
|    1 | bumblebee      |    200 |
|    1 | king of monkey |  10000 |
|    2 | Medusa         | 100000 |
+------+----------------+--------+
3 rows in set (0.00 sec)


关联多表的视图:

以上都是基于单表的操作,接下来我们从两张表中来做一些实战。

我们额外创建一个info表作为辅助的数据表,如下:

mysql> select * from info;
+----+--------+---------------------------------+
| id | stu_id | info                            |
+----+--------+---------------------------------+
|  1 |      1 | A member of the deformed steel. |
|  2 |      2 | Hero in Chinese Mythology.      |
|  3 |      3 | In Greek mythology the Gorgon.  |
+----+--------+---------------------------------+
3 rows in set (0.00 sec)


我们创建一个连接了两张基本表的视图stu_view3

mysql> CREATE VIEW stu_view3 AS SELECT s.id, s.name, s.age, i.info FROM students s, info i WHERE i.stu_id=s.id;
Query OK, 0 rows affected (0.00 sec)

验证过程:

mysql> select * from stu_view3;
+------+----------------+--------+---------------------------------+
| id   | name           | age    | info                            |
+------+----------------+--------+---------------------------------+
|    1 | bumblebee      |    200 | A member of the deformed steel. |
|    2 | king of monkey |  10000 | Hero in Chinese Mythology.      |
|    3 | Medusa         | 100000 | In Greek mythology the Gorgon.  |
+------+----------------+--------+---------------------------------+
3 rows in set (0.00 sec)


对连接了两张基本表的视图stu_view3进行更新操作:

mysql> UPDATE stu_view3 SET age=800 WHERE id=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0


验证视图stu_view3:

mysql> select * from stu_view3;
+------+----------------+--------+---------------------------------+
| id   | name           | age    | info                            |
+------+----------------+--------+---------------------------------+
|    1 | bumblebee      |    800 | A member of the deformed steel. |
|    2 | king of monkey |  10000 | Hero in Chinese Mythology.      |
|    3 | Medusa         | 100000 | In Greek mythology the Gorgon.  |
+------+----------------+--------+---------------------------------+
3 rows in set (0.00 sec)


验证基本表:

mysql> select * from students;
+------+----------------+--------+
| id   | name           | age    |
+------+----------------+--------+
|    1 | bumblebee      |    800 |
|    2 | king of monkey |  10000 |
|    3 | Medusa         | 100000 |
+------+----------------+--------+
3 rows in set (0.00 sec)


总结:

1.在使用视图的时候,就是与使用表的语法一样的
2.创建视图的时候,该视图的名字如果与已经存在表重名的话,那么会报错,不允许创建。视图就是一种特殊的表

MySQL视图的使用

标签:mysql   视图   view   数据库   

热心网友 时间:2022-04-29 22:21

主要以下两种情况:
1:保密工作,比如有一个员工工资表,如果你只希望财务看到员工工资这个字段,而其他人不能看到工资字段,那就用一个视图,把工资这个敏感字段过滤掉。
2:有一个查询语句非常复杂,大概有100行这么多,有时还想把这个巨大无比的select语句和其他表关联起来得到结果,写太多很麻烦,可以用一个视图来代替这100行的select语句,充当一个变量角色。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我家农用井50米,出水太咸,把井打深些水质会不会好? ...卡想注册一个支付宝账号,可是这个号码已经被注册过了,怎么办... 遭受同学无缘无故的冷嘲热讽怎么办?我能告诉家长和老师吗? 我说他小学生,他回复:我就是小学生,我该怎么反击他? 新手从0学习玩草缸!准备工作!入坑指南! 网格员是事业编制吗?能转 网格员待遇会提高吗 iphone折叠屏外观渲染图一览_iphone折叠屏长什么样 2024年12月14日是什么情人节2024年12月14日是拥抱情人节 一次性补缴社保的年限从哪里显示 在电大考大专毕业证是谁发? 京东网购成功的东西可以分享到qq空间给好友看看吗? 作文 夏日荷花别样红,请你用五彩荷香之笔描绘夏天荷塘景色。 注只求作 电大的大专毕业证和大专学校的毕业证一样吗? 三年级写荷塘的作文怎么写?题目是《荷塘趣事》 夏天的荷塘(画图写话)作文 深圳电大毕业证是哪里颁发的,有没有毕业证书的照片看下。如是*广播电视大学,后面会加上深圳电大几字 写春天的荷塘作文200字数 深圳电大和中央电大颁发的毕业证有什么不同? 拼多多册除,我在京东买东西,拼多多里面的好友会看到吗? 荷塘四季作文200个字 电大毕业后,获得的学历和学位证书上的学校不一致? *电大改名为国家开放大学,2014年春毕业的 毕业证书上盖的是那个学校的章呢?? 冬天的荷塘 作文 请问毕节电大是属于地方电大的还是*电大,毕业证上面写的是哪里?谢谢! 京东送额度给好友,自己消费记录好友看得见我自己的消费记录吗? 写春天万亩荷塘的作文600字 中央广播电视大学地方毕业证是什么的? 电大在报公务员的时候毕业学校填什么 关于写家乡河塘景色的作文。急!!! 作文 我看《荷塘月色》之美 急 中央电大为什么要更名国家开放大学,毕业证一样吗 朱自清将情绪通过“荷塘”﹑“月色”等景色表达出来。你将类似的情感经历真实的表达出来。(800字作文) 电大毕业的最高学历毕业院校是填哪个 描写雨后的荷塘 100字作文 电大中专是什么学校,中专被认可吗? 如何收缩毛孔 5个小偏方帮你再现细腻肌肤 合作办校的电大毕业证上以哪个学校为准 读荷塘月色有感800字 哪个品牌的自动激光打标机质量比较好? 遇到心脏病发作的患者该如何救助? 306极速浏览器 拦截窗口在哪里关闭 急急 请看清 题目是360极速浏览器 激光打标机应该选择哪个品牌? 哪个光纤激光打标机品牌口碑好? 心脏病发作时需急救,牢记哪些要点,关键时刻能救命? 心脏病患者发作时,有哪些急救处理,不得耽误? 360极速浏览器如何关闭窗口拦截功能(附图) 为什么用360极速浏览器一打开网页广告拦截就显示有广告被拦截? 哪种品牌的激光打标机比较好? 大专毕业学会计专业的可以考人力资源师证吗