1) MySQL 视图(View)是一种虚拟的表,是从数据库中一个或多个表中导出来的表。视图由列和行构成,行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。
2) 数据库中存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。
3) 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。
1) 使操作简便化。
2) 增加数据的安全性。
3) 提高表的逻辑独立性。
1) 定制用户数据,聚焦特定的数据
在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。
例如,当数据库同时存在时,如学生信息表、课程表和教师表等多种表同时存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信息表的视图。
2) 简化数据操作
在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简化操作。
3) 提高数据的安全性
视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用表的权限,来保护基础数据的安全。
4) 共享所需数据
通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数据,同样的数据只需要存储一次。
5) 更改数据格式
通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。
6) 重用 SQL 语句
视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。
案例:
视图
1、基本语法【创建视图】:CREATE VIEW 视图名 AS SELECT 语句;
语法说明如下:
1.
<视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
2.:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。2、查看视图:DESCRIBE 视图名;(DESC 视图名;)
3、修改视图:ALTER VIEW <视图名> AS
4、删除视图: drop view 视图名;
- -- 视图的作用
- -- 1) 使操作简便化。
- -- 2) 增加数据的安全性。
- -- 3) 提高表的逻辑独立性。
-
- #在数据库中,视图只是多张表之间的连接查询的定义;并不是一张真实表,而是一张虚拟表,当你在运行这个定义的时候才会从原表中抽取数据
-
- #视图语法:CREATE VIEW 视图名 AS SELECT 语句;
- #1060 - Duplicate column name 'tid' 出现多个字段
- #连表查询
- create view v_student_score as
- select s.*,sc.score,c.*,t.tname from t_teacher t,t_course c,
- t_score sc,t_student s
- where t.tid=c.tid and c.tid=sc.cid and sc.sid=s.sid;
-
- #查询视图
- select * from v_student_score;
- #删除视图
- -- drop view 视图名;
1、什么是索引?
索引是一种特殊的数据库结构, 索引是由数据库表中一列或多列组合而成,其作用是提高对表中数据的查询速度。类似于图书的目录,方便快速定位,寻找指定的内容。
2、为什么要使用索引?
索引是 MySQL 中十分重要的数据库对象,是数据库性能调优技术的基础,常用于实现数据的快速检索。
在 MySQL 中,通常有两种方式访问数据库表的行数据:
1) 顺序访问
顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据。
顺序访问实现比较简单,但当表中有大量数据的时候,效率非常低下。例如,在几千万条数据中查找少量的数据时,使用顺序访问方式将会遍历所有的数据,花费大量时间,显然会影响数据库的处理性能。2) 索引访问
索引访问是通过遍历索引来直接访问表中记录行的方式。
使用这种方式的前提是对表建立一个索引,在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。索引存储了指定列数据值的指针,根据指定的排序顺序对这些指针排序。
3、索引的优缺点
优点:
缺点:
简单来说就是:
优点:提高查询数据的速度。
缺点:创建和维护索引的时间增加了,同时占用硬盘空间。
4、索引的分类
1) 普通索引:是最基本的索引,它没有任何限制;
2) 唯一索引:与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;
3) 主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;
4) 组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;
5) 全文索引:使用FULLTEXT参数可以设置,全文索引只能创建CHAR,VARCHAR,TEXT类型的字段上。主要作用是提高查询较大字符串类型的速度;只有MyISAM引擎支持该索引,MySQL默认引擎不支持;mysql5.7+
-- 1.创建索引
-- CREATE [UNIQUE|FULLTEXT] INDEX 索引名 ON 表名(字段名[(长度)][ASC|DESC])
-- 2.修改索引
-- ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT] INDEX 索引名(字段名[(长度)][ASC|DESC])
-- 3.删除索引: DROP INDEX 索引名 ON 表名
案例:
- #------------------------------------
- CREATE TABLE t_log(
- id varchar(32) NOT NULL COMMENT '唯一标识',
- ip varchar(15) NOT NULL COMMENT 'IP地址',
- userid varchar(32) NOT NULL COMMENT '用户ID',
- moduleid varchar(32) NOT NULL COMMENT '模块ID',
- content varchar(500) NOT NULL COMMENT '日志内容',
- createdate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建日期',
- url varchar(100) DEFAULT NULL COMMENT '请求URL地址',
- PRIMARY KEY (id)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
- #查询表t_log
- select * from t_log;
- select count(0) from t_log;
-
- #索引是用于提高查询效率的
- -- 索引分类(100408)
- -- 1) 普通索引:是最基本的索引,它没有任何限制;
- -- 未建立索引之前:0.146s
- select * from t_log where moduleid='100408';
- -- 在建立索引之后:0s
- create index idx_moduleid on t_log(moduleid); #1.383s
- #删除索引
- drop index idx_moduleid on t_log;
-
- -- 2) 唯一索引:与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;
- #1061 - Duplicate key name 'idx_moduleid' 有重复数据(值)
- create unique index idx_moduleid on t_log(moduleid);
-
- -- 3) 主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;
- select * from t_log where id='00d3f9ffca154dd9aa280916ac538019';
-
- -- 4) 组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;
- #explain:【执行计划】检测是否走索引(排查sql语句是否走索引)
- drop index idx_userid_moduleid_createdate on t_log;
-
- create index idx_userid_moduleid_createdate on t_log(userid,moduleid,createdate);
-
- #满足
- explain select * from t_log where userid='';
- explain select * from t_log where userid='ef2f16a90e4311e99f0128d24413c295' and moduleid='100408';
- explain select * from t_log where userid='' and moduleid='' and createdate='';
-
- #不满足
- explain select * from t_log where moduleid='100408';
-
- -- 5) 全文索引:使用FULLTEXT参数可以设置,全文索引只能创建在CHAR,VARCHAR,TEXT类型的字段上。主要作用是提高查询较大字符串类型的速度;只有MyISAM引擎支持该索引,MySQL默认引擎不支持;mysql5.7+
-
添加总数据:
创建索引之前:
创建索引之后:
explain:【执行计划】检测是否走索引(排查sql语句是否走索引)
key为空,代表没有走索引
key有值,代表走了索引