一. 视图
视图:一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果
视图语法
-- 创建
create view 视图名
as
查询语句;
-- 使用
select * from 视图名;
-- 修改
create or replace view 视图名
as
查询语句;
alter view 视图名
as 查询语句;
应用场景:
- 多个地方用到同样的查询结果
- 该查询结果使用的sql语句较复杂
视图的好处:
- 重用sql语句
- 简化复杂的sql操作,不必知道它的查询细节
- 保护数据,提高安全性
创建:
create view 视图名 as 查询语句
如果在创建视图遇到了问题,可能是以下几种情况之一:
表不存在: 请确保真实的数据表确实存在于你的数据库中。
列不存在: 确保表中有列。可以通过执行
DESCRIBE 表名;
或者SHOW COLUMNS FROM 表名;
来查看表的列信息。权限问题: 确保你有足够的权限来执行
CREATE VIEW
操作。
查看:
show create view 视图名
使用:
select * from 视图名
修改:
方式 1:如果视图存在则进行修改
create or replace view 视图名 as 查询语句
方式 2:直接对已存在的视图进行修改
alter view 视图名 as 查询语句
删除:
drop view 视图名
更新内容:
insert into 视图名 values(值,...)
update 视图名 set 列名=值
delete from 视图名
- 在对视图更新的同时,对原表也进行了更新。
- 一般对视图中不进行更新,而且许多类型的视图不支持更新:
- 创建视图的sql语句中包含分组函数、distinct、group by、having、union。
- 常量视图。
- 创建视图的sql语句中select中包含子查询。
- 创建视图的sql语句中用到了join或其他连接(可以修改,不能插入删除)。
- 创建视图的sql语句中from了一个不能更新的视图。
- 创建视图的sql语句中where子句的子查询引用了from子句中的表。
- 视图与表:
- 创建语句不同。
- 视图没有实际占用数据存储的物理空间。而表实际占有。
- 视图一般不进行增删改,只进行查询。而表都可以进行。
二. 索引
索引概述:
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。
数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构(B树)就是索引。总之,就是排序+查找功能。
为了加快查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在一定的复杂度内获取到相应数据,从而快速的检索出符合条件的记录。