这里是MySQL的基础内容,我将他们的链接放到下面,方便大家阅读
mysql中DDL的操作方法
mysql中的DML操作
点了五根烟,终于把MySql中查询操作(DQL)搞懂了!
MySql中数据完整性彻底解析
MySQL多表查询一遍打通
MySQL中子查询看不明白?那就得好好练
一些我们在MySQL中常用的函数
让我们来聊聊MySQL中的权限操作
MySQL中关于视图的一点两点
MySQL中的存储过程一路通关!
MySQL中索引一遍过
一、什么是视图
- 视图是一个虚拟表,其内容由查询定义。
- 简单的来说视图时由select结果组成的表。
- 同真实表一样,视图包含一系列带有名称的列和行数据。
- 行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成。
二、视图的特性
- 视图是对若干基本表的而引用,一张虚表,查询语句执行的结果。
- 不存在具体的数据(基本表数据发生了改变,视图也会跟着改变)。
- 可以跟基本表一样,进行增删改查操作(有条件限制)。
三、视图的作用
-
安全性
创建一个视图,定义好该视图所操作的数据。之后将用户权限与视图绑定,这样的方式是使用到一个特性:grant语句可以针对视图进行授予权限。这样就可以将原本的数据表中的数据经过处理再给其他人看,保存了自己隐私。
-
查询性能提高
-
提高了数据的独立性
四、视图的创建、修改、删除
- 创建语句
CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}
VIEW 视图名 [(属性清单)]
AS SELECT [...]
FROM [...]
[WITH [CASCADED|LOCAL] CHECK OPTION;
ALGORITHM参数:
- marge 处理方式为替换式,可以进行更新真实表中的数据。
- temptable 处理方式为具化式,由于数据存储再临时表中,所以不可以进行更新操作。
- undefined 没有定义ALGORITHM参数,更倾向于选择替换式,因为它更加有效。
WITH CHECK OPTION
更新数据不能插入或更新不符合视图限制条件的记录。
LOCAL和CASCADED
为可选参数,决定了查询测试的范围,默认值为CASCADED。
- 修改语句
CREATE ON REPLACE VIEW 视图名
AS SELECT [...]
FROM [...];
- 删除语句
DROP VIEW 视图名;
五、视图机制
-
替代式
操作视图时,视图名直接被视图定义给替换掉。
//直接用括号里面的代码代替emp_salary这个视图 SELECT * FROM emp_salary; SELECT * FROM (SELECT * FROM emp WHERE salary > 2000);
-
具化式
mysql先得到了视图执行的结果,给结果形成一个中间结果暂时存在内存中,外面的select语句就调用了这些中间结果(临时表)。
SELECT * FROM emp WHERE salary > 2000; ——> temptable //将查询结果存入临时表中 SELECT * FROM temptable; //查询临时表
六、视图中不可修改的部分
- 聚合函数
DISTINCT
关键字GROUP BY
子句HAVING
子句UNION
运算符FROM
子句中包含多个子表SELECT
语句中引用了不可更新的视图
只要视图当中的数据不是来自于基表,就不能够直接修改。