目录

1.为什么要使用视图

2.视图分类

3.创建视图

4.修改视图

5.视图上执行DML操作

6.索引


1.为什么要使用视图

  • 限制其它用户对数据库表的访问,因为视图可以有选择性的显示数据库表的一部分
  • 容易实现复杂的查询
  • 对于相同的数据可以产生不同的视图

2.视图分类

视图分为简单视图复杂视图,最基本差别在DML操作上

特征 简单视图 复杂视图
基表数量 一个 一个或多个
包含函数 没有
包含数据组 没有
通过视图实现DML操作 可以 不一定

3.创建视图

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

OR REPLACE:如果所创建的视图已经存在,该选项表示修改原视图的定义;
view_name :视图的名称;
column_list :列名,列名的数量必须和视图所对应查询语句的列数量相等;
select_statement :一条完整的SELECT语句;
WITH CHECK OPTION:一个约束条件,通过视图所插入或修改的数据行必须满足视图所定义的查询;
ALGORITHM子句是可选的,它表示使用何种算法来处理视图。此外,它并不属于标准SQL的一部分,而是MySQL对标准SQL进行的功能扩展。ALGORITHM可以设置三个值:MERGE、TEMPTABLE或UNDEFINED。如果没有ALGORITHM子句,则默认值为UNDEFINED(未定义的)。

注意事项:

  • 对于MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
  • 对于TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。
  • 对于UNDEFINED,MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。
  • [WITH [CASCADED | LOCAL] CHECK OPTION]是可选的。该选项中的CASCADED为默认值,LOCAL CHECK OPTION用于在可更新视图中防止插入或更新行,此选项一般不使用。如果要确保在视图上执行的DML操作仅限于一定的范围,便可使用WITH CHECK OPTION子句;

例子:

-- 创建一个视图v_emp10,通过该视图只能查看10号部门的员工编号,员工姓名,职位。
create view v_emp10
as
select empno, ename, job
from emp
where deptno = 10
with check option;

4.修改视图

使用CREATE OR REPLACE VIEW子句修改视图

例子:

-- 修改视图v_emp10的列名create or replace view v_emp10(部门编号, 雇员姓名, 职位)
as
select empno, ename, job
from emp
where deptno = 10
with check option;

注意:CREATE VIEW子句中别名的顺序必须和内部查询中的列的顺序一一对应

5.视图上执行DML操作

(1)通过视图删除基表中数据,只要视图中不出现以下情况:

  • Group 函数;
  • GROUP BY 子句;
  • DISTINCT 关键字;

(2) 通过视图修改基表中数据,只要视图中不出现以下情况:

  • GROUP函数、GROUP BY子句,DISTINCT关键字;
  • 使用表达式定义的列;

(3) 通过视图向基表插入数据,只要视图中不出现以下情况:

  • GROUP函数、GROUP BY子句,DISTINCT关键字;
  • 使用表达式定义的列;
  • 基表中未在视图中选择的其它列定义为非空并且没有默认值;

(4)例子

delete from v_emp10 where 部门编号 = 7782; -- 删除成功,此时基表emp中empno等于“7782”的记录也删除了
update v_emp10 set 雇员姓名 = 'NEW_KING' where 部门编号 = 7839;-- 修改成功,此时基表emp中雇员编号为7839的员工姓名也修改了
insert into v_emp10 values(5120, 'LYNN', 'PRESIDENT'); -- 插入失败

6.索引

(1)索引介绍

  • 索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。MySQL中,所有的数据类型都可以被索引。
  • 索引由数据库表中一列或多列组合而成,其作用是提高对表中数据的查询速度。
  • 索引是创建在表上的,是对数据库表中一列或多列的值进行排序的一种结构。
  • 索引可以提高查询的速度。通过索引,查询数据时可以不必读完记录的所有信息,而只是查询索引列。

(2)索引的优缺点

  • 索引的优点是可以提高检索数据的速度,这是创建索引的最主要的原因;对于有依赖关系的子表和父表之间的联合查询时,可以提高查询速度;使用分组和排序子句进行数据查询时,同样可以显著节省查询中分组和排序的时间。
  • 索引的缺点是创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加;索引需要占用物理空间,每一个索引要占一定的物理空间;增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降低了。

(3)索引分类

  • 普通索引
  • 惟一性索引
  • 全文索引
  • 单列索引
  • 多列索引
  • 空间索引

(4)创建索引

①创建表的时候创建索引

CREATE TABLE  表名 ( 属性名 数据类型 [完整性约束条件],
属性名 数据类型 [完整性约束条件],
…
属性名 数据类型
[UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
[别名](属性名1 [(长度)] [ASC | DESC])
);

②在已经存在的表上创建索引

CREATE [ UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名
ON 表名 (属性名 [ (长度) ] [ASC | DESC] );

注意:

  • 创建全文索引只能创建在char,varchartext类型的字段上,而且,现在只有MyISAM存储引擎支持全文索引。
  • 使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用。
  • 创建空间索引时,表的存储引擎必须是myisam类型,而且索引字段必须有非空约束。空间数据类型包括geometry,point,linestring和polygon类型等。平时很少用到。

(5)删除索引

DROP INDEX 索引名 ON 表名;

(6)例子

-- 创建表时创建索引
--      普通索引
create table test1(id int,name varchar(20),sex enum('男', '女'),index idx_id(id)
);
--    唯一性索引
create table test2(id int unique,name varchar(20),sex enum('男', '女'),unique index uq_id(id asc)
);
--     全文索引
create table test3(id int,info varchar(20),fulltext index ft_idx_info(info)
)engine = myisam;
--     多列索引
create table test4(id int,name varchar(20),sex enum('男', '女'),index idx_name_sex(name, sex)
);
--     控件索引
create table test5(id int,space geometry not null,spatial index idx_space(space)
)engine = myisam;-- 在已有的表中创建索引
alter table dept add unique index idx_uk_dpetno(deptno);-- 删除索引
drop index idx_uk_dpetno on dept;

Mysql第四天笔记04——视图和索引相关推荐

  1. mysql实验四数据库查询和视图_数据库-第四次实验报告-视图-t-sql语句

    实验十报告 创建视图 实验目的 1.掌握创建视图的SQL语句的用法. 2.掌握使用企业管管理器创建视图的方法. 3.掌握使用创建视图向导创建视图的方法. 4.掌握查看视图的系统存储过程的用法. 5.掌 ...

  2. mysql实验四数据库查询和视图_实验四 数据库查询和视图.doc

    实验四 数据库查询和视图 测试过程:(实验中出现的问题.错误.解决方法) 问题一:新建查询,调试过程中出现提示无效行或列 问题二:新建查询,调试过程中出现第几行出现错误 解决办法:检查新建的查询,标点 ...

  3. mysql cascaded local_学习笔记-mysql_视图

    视图: create [or replace] [algorithm ={undefined|merge|temptable}] view view_name [(column_list)] as s ...

  4. Mysql第四天笔记01——常用函数

    目录 1.Mysql函数分类 2.常见数学函数 3.字符串函数(重点) 4.日期和时间函数 5.流程控制函数 6.其它函数 1.Mysql函数分类 (1)单行函数 特点: 单行函数对单行操作 每行返回 ...

  5. Mysql第四天笔记02——多表连接查询

    目录 1.什么是连接 2.连接类型 3.笛卡尔积 4.限制歧义列名 5.多表查询 6.自身连接 7.交叉连接 8.自然连接 9.USING子句 10.ON子句 11.左外连接和右外连接 1.什么是连接 ...

  6. Mysql第四天笔记03——高级查询

    目录 1.分组函数 2.HAVING子句 3.SELECT语句执行过程 4.子查询 1.分组函数 (1)为什么要使用分组函数: 分组函数是对数据行的集合进行操作并按组给出一个结果,这个结果可直接输出, ...

  7. MySQL中四种方式给字段添加索引

    MySQL中给字段创建索引的四种方式: 添加主键 ALTER TABLE tbl_name ADD PRIMARY KEY (col_list); 该语句添加一个主键,这意味着索引值必须是唯一的,且不 ...

  8. mongodb 学习笔记 04 -- 游标、索引

    游标 var cursor = db.collectionName.find() 创建游标 cursor.hasNext() 是否有下一个元素 cursor.next() 取出下一个元素 比如 whi ...

  9. MySQL学习笔记 04、MySQL进阶(索引、事务、锁)

    文章目录 前言 一.MySQL的目录结构 1.1.认识目录文件 1.2.配置文件设置 windows平台下设置 linux环境下设置 二.MySQL的系统架构 2.1.MySQL系统的逻辑架构: 2. ...

最新文章

  1. FreeBSD 8.0 终于发布正式版了
  2. Globalplatform TEE api介绍
  3. 关于vs编码格式UTF8中文处理方式
  4. Ajax的get与post的区别,什么时候使用post?
  5. 【操作系统】互斥:软件解决方法
  6. 什么?船开上高架了!
  7. css如何实现一个小三角形,用纯css写一个常见的小三角形
  8. python 化学模块_Python chemif包_程序模块 - PyPI - Python中文网
  9. while((getchar ()) != '\n')理解
  10. 如何从零开始搭建网站?
  11. MVC教程第二篇:第一个页面
  12. Python刷题-4
  13. java中两种遍历集合的方式_Java中Map集合的两种遍历方式
  14. 2015年7月15日 JS第一课(JS,声明变量,数据类型)
  15. python多线程刷网站流量(含ip代理池文档,可制作成exe文件挂服务器代刷)
  16. Word VBA-表格操作汇总
  17. 2020年开始,中国程序员前景一片灰暗,是这样吗?
  18. 【毕业设计】翻译词霸的实现
  19. Ubuntu 16.04安装搜狗拼音
  20. Linear Algebra with Sub-linear Zero-Knowledge Arguments学习笔记

热门文章

  1. 浅谈大数据及相关技术在计算机专业的应用
  2. 故宫景点功课17:内廷西路(中)
  3. Materia Design(一)--将 Materia Design 兼容到5.0之前的设备
  4. 微信如何群发不封号?
  5. 03 并发用户数怎么计算么
  6. PPT转MP4和生成验证码
  7. 【调剂】郑州大学河南先进技术研究院2022年硕士研究生招生拟调剂信息公告
  8. 进程互斥以及进程互斥实现方法(包含代码)
  9. 滚动穿透及IOS惯性滚动究极解决方案
  10. HTTP返回soapxml解析为实体类