Mysql第四天笔记04——视图和索引
目录
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,varchar或text类型的字段上,而且,现在只有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——视图和索引相关推荐
- mysql实验四数据库查询和视图_数据库-第四次实验报告-视图-t-sql语句
实验十报告 创建视图 实验目的 1.掌握创建视图的SQL语句的用法. 2.掌握使用企业管管理器创建视图的方法. 3.掌握使用创建视图向导创建视图的方法. 4.掌握查看视图的系统存储过程的用法. 5.掌 ...
- mysql实验四数据库查询和视图_实验四 数据库查询和视图.doc
实验四 数据库查询和视图 测试过程:(实验中出现的问题.错误.解决方法) 问题一:新建查询,调试过程中出现提示无效行或列 问题二:新建查询,调试过程中出现第几行出现错误 解决办法:检查新建的查询,标点 ...
- mysql cascaded local_学习笔记-mysql_视图
视图: create [or replace] [algorithm ={undefined|merge|temptable}] view view_name [(column_list)] as s ...
- Mysql第四天笔记01——常用函数
目录 1.Mysql函数分类 2.常见数学函数 3.字符串函数(重点) 4.日期和时间函数 5.流程控制函数 6.其它函数 1.Mysql函数分类 (1)单行函数 特点: 单行函数对单行操作 每行返回 ...
- Mysql第四天笔记02——多表连接查询
目录 1.什么是连接 2.连接类型 3.笛卡尔积 4.限制歧义列名 5.多表查询 6.自身连接 7.交叉连接 8.自然连接 9.USING子句 10.ON子句 11.左外连接和右外连接 1.什么是连接 ...
- Mysql第四天笔记03——高级查询
目录 1.分组函数 2.HAVING子句 3.SELECT语句执行过程 4.子查询 1.分组函数 (1)为什么要使用分组函数: 分组函数是对数据行的集合进行操作并按组给出一个结果,这个结果可直接输出, ...
- MySQL中四种方式给字段添加索引
MySQL中给字段创建索引的四种方式: 添加主键 ALTER TABLE tbl_name ADD PRIMARY KEY (col_list); 该语句添加一个主键,这意味着索引值必须是唯一的,且不 ...
- mongodb 学习笔记 04 -- 游标、索引
游标 var cursor = db.collectionName.find() 创建游标 cursor.hasNext() 是否有下一个元素 cursor.next() 取出下一个元素 比如 whi ...
- MySQL学习笔记 04、MySQL进阶(索引、事务、锁)
文章目录 前言 一.MySQL的目录结构 1.1.认识目录文件 1.2.配置文件设置 windows平台下设置 linux环境下设置 二.MySQL的系统架构 2.1.MySQL系统的逻辑架构: 2. ...
最新文章
- FreeBSD 8.0 终于发布正式版了
- Globalplatform TEE api介绍
- 关于vs编码格式UTF8中文处理方式
- Ajax的get与post的区别,什么时候使用post?
- 【操作系统】互斥:软件解决方法
- 什么?船开上高架了!
- css如何实现一个小三角形,用纯css写一个常见的小三角形
- python 化学模块_Python chemif包_程序模块 - PyPI - Python中文网
- while((getchar ()) != '\n')理解
- 如何从零开始搭建网站?
- MVC教程第二篇:第一个页面
- Python刷题-4
- java中两种遍历集合的方式_Java中Map集合的两种遍历方式
- 2015年7月15日 JS第一课(JS,声明变量,数据类型)
- python多线程刷网站流量(含ip代理池文档,可制作成exe文件挂服务器代刷)
- Word VBA-表格操作汇总
- 2020年开始,中国程序员前景一片灰暗,是这样吗?
- 【毕业设计】翻译词霸的实现
- Ubuntu 16.04安装搜狗拼音
- Linear Algebra with Sub-linear Zero-Knowledge Arguments学习笔记