MySQL VIEW(视图)学习笔记

视图的作用:

■视图可以让查询变得很清楚:

如果您要找的数据存放在三张关系表里面,查看数据的时候,你就要写个联合查询了。换种方法,我把联合查询的数据放到视图里面,这样查询起来是不是更方便呢?

■保护数据库的重要数据,给不同的人看不同的数据:

假如您让别人帮您开发一套系统,但是你又想把真正表的暴露出来,这个时候视图是不是最好的选择呢?

视图的类型:

mysql的视图有三种类型:MERGE、TEMPTABLE、UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。算法会影响MySQL处理视图的方式。
1,MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
2,TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。
3,UNDEFINED,MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。

二、创建、删除视图:

创建视图基本语法:

 代码如下 复制代码
CREATE
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

如下:

 代码如下 复制代码

mysql> CREATE VIEW sc AS SELECT s.Name,c.Cname FROM students AS s RIGHT JOIN courses AS c ON s.CID1=c.CID;
Query OK, 0 rows affected (0.07 sec)

mysql> SHOW TABLES;
+------------------+
| Tables_in_jiaowu   |
+------------------+
| courses                |
| sc                        |
| scores                  |
| students              |
| tutors                  |
+------------------+
5 rows in set (0.01 sec)

mysql> SELECT * FROM sc;
+--------------+------------------+
| Name             | Cname                |
+--------------+------------------+
| GuoJing         | TaiJiquan             |
| YangGuo       | TaiJiquan             |
| DingDian       | Qishangquan       |
| HuFei             | Wanliduxing        |
| HuangRong    | Qianzhuwandushou|
| YueLingshang | Wanliduxing        |
| ZhangWuji      | Hamagong          |
| Xuzhu             | TaiJiquan             |
| NULL              | Yiyangzhi            |
| NULL              | Jinshejianfa         |
| NULL              | Qiankundanuoyi |
| NULL              | Pixiejianfa           |
| NULL              | Jiuyinbaiguzhua  |
+--------------+------------------+
13 rows in set (0.02 sec)

删除视图基本语法:

 代码如下 复制代码
DROP VIEW [IF EXISTS]
    view_name [, view_name] ...
    [RESTRICT | CASCADE]

如下:

 代码如下 复制代码
mysql> DROP VIEW IF EXISTS sc;
Query OK, 0 rows affected (0.01 sec)

查看视图创建过程:

 代码如下 复制代码

mysql> SHOW CREATE VIEW scG
*************************** 1. row ***************************
                View: sc
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `sc` AS select `s`.`Name` AS `Name`,`c`.`Cname` AS `Cname` from (`courses` `c` left join `students` `s` on((`s`.`CID1` = `c`.`CID`)))
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

三、在MySQL中使用视图的注意事项:

(1) 运行创建视图的语句需要用户具有创建视图(crate view)的权限,若加了[or replace]时,还需要用户具有删除视图(drop view)的权限;
(2) select语句不能包含from子句中的子查询;
(3) select语句不能引用系统或用户变量;
(4) select语句不能引用预处理语句参数;
(5) 在存储子程序内,定义不能引用子程序参数或局部变量;
(6)在定义中引用的表或视图必须存在。但是,创建了MySQL视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用check table语句;
(7) 在定义中不能引用temporary表,不能创建temporary视图;
(8) 在视图定义中命名的表必须已存在;
(9) 不能将触发程序与视图关联在一起;
(10) 在视图定义中允许使用order by,但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略。
(11)MySQL视图不支持雾化(即将视图保持为实际的数据),也不能创建索引,因此效率较低!

时间: 2024-09-14 20:23:11

MySQL VIEW(视图)学习笔记的相关文章

小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(四)Alert View视图 学习笔记

当我们的应用电量不足的时候,就需要警告提示,那么我们可以用Alert View视图 实现:

小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(五)Image View视图 学习笔记

留下两个问题:1.后面涉及到的异常不知道原因.2.动态图片到了程序里面就不动了. 然后: 上面是有问题的,下面是没有问题的了. 代码(另外简单写的代码,纠正了那个错误): 1 import UIKit 2 3 class ViewController: UIViewController{ 4 5 @IBOutlet weak var imageView: UIImageView! 6 @IBAction func button(sender: UIButton) { 7 imageView.an

mysql视图学习笔记记录

创建视图 在MySQL中,创建视图的完整语法如下: CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]     VIEW view_name [(column_list)]     AS select_statement     [WITH [CASCADED | LOCAL] CHECK OPTION] 其对应的语法变量信息如下: [OR REPLACE]     中括号中的OR REPLACE关键字是可选的.如果

物化视图学习笔记

物化视图 删除表后物化视图日志自动删除 SQL> CREATE MATERIALIZED VIEW LOG ON TT WITH ROWID,SEQUENCE(OBJECT_ID,OBJECT_NAME) INCLUDING NEW VALUES; Materialized view log created. SQL> EXEC DBMS_SNAPSHOT.REFRESH('MV1'); BEGIN DBMS_SNAPSHOT.REFRESH('MV1'); END; * ERROR at l

MySQL Group Replication 学习笔记

作者简介 刘伟  云和开创高级顾问 题记:group replication作为mysql官方,在5.7版本阶段开发的,innodb的分布式数据库架构,从发布开始就有很多关注,下文是我对目前为止的材料以及实验的一些总结. 主要资料来源是官方blog:http://mysqlhighavailability.com/ group replication架构 group replication(后文简称GR)实现的分布式数据库架构,底层的分布式基础是Paxos(出于行文限制,此处不单独交代Paxos

MySQL Group Replication 学习笔记—group replication 小结

group replication 小结 group replication作为mysql官方,在5.7版本阶段开发的,innodb的分布式数据库架构,从发布开始就有很多关注,下文是我对目前为止的材料以及实验的一些总结. 主要资料来源是官方blog:http://mysqlhighavailability.com/ group replication架构 group replication(后文简称GR)实现的分布式数据库架构,底层的分布式基础是Paxos(出于行文限制,此处不单独交代Paxos

Mysql源码学习笔记 偷窥线程_Mysql

感觉代码有些凌乱,注释代码都写的比较随意,好像没有什么统一的规范,不同的文件中代码风格也有差异,可能Mysql经过了很多牛人的手之后,集众牛人之长吧.也可能是我见识比较浅薄,适应了自己的代码风格,井底之蛙了,总之还是怀着敬畏的心情开始咱的源码之旅吧.本人菜鸟,大神轻拍. Mysql可以启动起来了,应该怎么学习呢?总不能从main开始一步一步的看吧,Mysql作为比较底层的大型软件,涉及到数据库实现的方方面面,没有厚实的数据库理论基础和对Mysql各个模块相当的熟悉,从main开始势必会把自己引入

mysql数据库入门学习笔记(1/2)

数据库一直没怎么重视,前段时间看了看mysql的基础知识,不看不知道,一看吓一跳,很多基础都竟然不知道,一直傻傻的用一些简单的.笨笨的方法,看了之后原来竟是如此如此,生活如此多娇,以前看不懂的,现在也懂点了,以前看到就头晕的,现在不晕了,发现一个奇怪的现象,应该很多人都有吧,当学一种知识的时候,而当时确实又是学不会.学不好的时候,随着时间的慢慢推移,再回过头来看的时候,发现比以前容易接受得多了--难怪这么多人到快挂的时候才后悔,不扯这么多了,把记录的笔记分享出来,方便日后查悦. 一.data数据

mysql 存储过程语法学习笔记

今天又把mysql存储过程学习了下,大家先看以下代码: 对语法不懂的朋友,可以详细看下语法结构.  代码如下 复制代码 CREATE PROCEDURE and CREATE FUNCTION Syntax CREATE     [DEFINER = { user | CURRENT_USER }]     PROCEDURE sp_name ([proc_parameter[,...]])     [characteristic ...] routine_body CREATE     [DE