目录
一、视图
1.概念:
视图相当于创建的一张虚拟表或存储查询,视图访问的数据不作为独特的对象存储在数据库内。
可以包含一个表中的所有行或从表中选择部分行。
视图可以从一个或多个表取决于书面SQL查询来创建。
2.特点:
- 视图着重于特定数据。
- 视图可以限定查询数据。
- 简化数据的操作,易维护。
3.创建视图:
CREATE VIEW view_name AS SELECT column1, column2..... FROM table_name WHERE [condition];
WITH CHECK OPTION:是CREATE VIEW语句选项。目的是为了确保所有更新和插入满足视图定义的条件。如果它没有满足条件,在UPDATE或INSERT返回一个错误。
调用:select
把视图当做一张表!
eg:
--create view Stu_nv as select FName,FAge from MyStudent where FGender='女'
--select * from Stu_nv
--联合多表查询
--create view view_StuInfo as select FName,FAge,FGender,classId from MyClass left join MyStudent on MyClass.classId=MyStudent.FClassId WITH CHECK OPTION
--select * from view_StuInfo
4.更新视图:
右键--编写视图脚本为--ALTER到
在一定条件下可以更新:
•SELECT子句不包含关键字DISTINCT。
•SELECT子句不包含汇总函数。
•SELECT子句不包含集合函数。
•SELECT子句不能包含集合运算符。
•SELECT子句不能包含一个ORDER BY子句。
•FROM子句中不能包含多个表。
•WHERE子句不能包含子查询。
•查询不包含GROUP BY或HAVING。
•计算列无法更新。
•从基表中的所有NOT NULL列必须包含在视图是为了使用INSERT查询功能。
UPDATE CUSTOMERS_VIEW SET AGE = 35 WHERE name='Ramesh';
视图中的操作会影响原表!!
5.删除视图
视图中删除行:
DELETE FROM CUSTOMERS_VIEW WHERE age = 22;
删除视图:
DROP VIEW CUSTOMERS_VIEW;
二、索引
1.概念
是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。
例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。通过索引可以大大的提高数据库的检索速度,提高数据库的性能。
2.索引类型
Ø唯一索引
Ø主键索引
Ø聚集索引:表中各行的物理顺序与键值的逻辑顺序相同,每个表只能有一个----类比拼音查字法!!
注: 因为数据库中的数据只能按照一个顺序进行排列,所以聚集索引一个数据库只能有一个。在mysql中,不能自己创建聚集索引,主键即为聚集索引,如果没有创建主键,那么默认非空的列为聚集索引,如果没有非空的列那么会自动生成一个隐藏列为聚集索引。所以一般在mysql中,我们创建的主键即为聚集索引,数据是按照我们的主键顺序进行排列。所以在根据主键进行查询时会非常快。
Ø非聚集索引:非聚集索引指定表的逻辑顺序,数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。
注:非聚集索引可以简单理解为有序目录,是一种以空间换取时间的方法。为id_num添加了非聚集索引后,会给id_num进行排序(内部使用结构为B+树),并且排序后,我只需要查询此目录(即查询B+树),很快就知道为id为56的在数据库中的第67条,而不需要在去遍历表中的所有数据。所以,在非聚集索引中,不重复的数据越多,那么索引的效率越高。
3.创建索引
CREATE INDEX index_name ON table_name (column_name)
创建唯一索引:
CREATE UNIQUE INDEX index_name ON table_name (column_name)
降序:在列名称之后添加保留字 DESC
eg: CREATE INDEX PersonIndex ON Person (LastName DESC)
4.删除索引
DROP INDEX index_name ON talbe_name
5.优缺点及使用情况
- 优点:加快访问速度;加强行的唯一性
- 缺点:带索引的表在数据库中的存储需要更多的空间;
下列情况下可以使用索引:
- 该列频繁用于搜索;
- 该列用于对数据进行排序;
下列情况下避免使用索引:
- 列中仅仅包含几个不同的值