一、视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。即检索出来的数据按照视图定义的格式来进行显示。
(一)创建视图
- 语法:
CREATE VIEW view_name AS select_statement;
- 举例:
select stuName,couName,credit from student,course,score
where student.stuId = score.stuId
and score.couId = course.couId;
该查询涉及到三个表的联结,where 条件子句,比较复杂。可以使用视图来简化该操作。
创建视图:
create view stuScore as
select stuName,couName,credit from student,course,score
where student.stuId = score.stuId
and score.couId = course.couId;
直接对视图进行select语句查询:
select * from stuScore;
直接对视图进行select语句查询和之前的联表查询效果一样,但更简洁。
对视图进行条件查询:
select * from stuScore where couName = 'c#';
对视图进行分组操作:
select stuName cast(sum(credit) as decimal(9,3))
as totalScore from stuScore group by stuName;
- 注意
创建视图时,若视图存在,可以先使用drop再用create,也可以直接使用create or replace view。如果创建的视图不存在,则第二种方法会创建一个视图,如果要创建的视图存在,则第二种方法会替换掉原有的视图。
视图中的数据是否可以更新,视情况而定。
若视图的定义中包含以下操作,则不能通过视图更新数据:
- 分组(group by 和 having)
- 联结
- 子查询
- 并
- 聚集函数
- Distinct
- 导出(计算)列
(二)删除视图
语法:
DROP VIEW view_name;
(三)使用视图的好处
- 视图能简化用户操作
- 视图使用户能以多种角度看待同一数据
- 视图对重构数据库提供了一定程度的逻辑独立性
- 视图能够对机密数据提供安全保护
- 适当的利用视图可以更清晰地表达查询
二、索引
索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等。
索引的优点是可以提高检索数据的速度,这是创建索引的最主要的原因;索引的缺点是创建和维护索引需要耗费时间,耗费时间的数量随着数据量的增加而增加。
(一)创建索引
- 创建表时创建索引
CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件],
属性名 数据类型 [完整性约束条件],...属性名 数据类型
[UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY
[别名](属性名1 [(长度)] [ASC | DESC]));
- 在已经存在的表上创建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名
ON 表名 (属性名[(长度)] [ASC | DESC]);
- 用ALTER TABLE语句来创建索引
ALTER TABLE 表名 ADD [ UNIQUE | FULLTEXT | SPATIAL ] INDEX
索引名(属性名 [(长度)] [ASC | DESC]);
(二)删除索引
DROP INDEX 索引名 ON 表名 ;
(三)常见问题及解答
- MySQL中索引、主键和惟一性的区别是什么?
索引建立在一个或几个字段上,建立了索引后,表中的数据就按照索引的一定规则排列。这样可以提高查询速度。
主键是表中数据的唯一标识。不同的记录的主键值不同。在建立主键时,系统会自动建立一个唯一性索引。
唯一性是建立在表中一个或者几个字段上。其目的是为了对于不同的记录,具有唯一性的字段的值是不同的。
- 表中建立了索引以后,导入大量数据为什么会很慢?
对已经建立了索引的表中插入数据时,插入一条数据就要对该记录按索引排序。因此,导入大量数据的时候速度会很慢。解决这种情况的办法是,在没有任何索引的情况插入数据,然后建立索引。