操作前准备
一、视图
1、创建视图
视图(View)是从一个或多个表或其它视图导出的,用来导出视图的表称为基表,导出的视图又称为虚表。在数据库中,只存储视图的定义,不存放视图对应的数据,这些数据仍然存放在原来的基表中。
使用视图前,必须先创建视图,创建视图要遵守以下原则:
(1)只有在当前数据库中才能创建视图,视图命名必须遵循标识符规则。
(2)不能将规则、默认值或触发器与视图相关联。
(3)不能在视图上建立任何索引。
T-SQL创建视图的语句是CREATE VIEW语句。语法格式:
CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] [ WITH <view_attribute>[ ,…n ] ] AS select_statement [ WITH CHECK OPTION ]
说明:
view_name:视图名称;scheme是数据库架构名
column:列名,此为视图中包含的列,最多可引用1024个列。
WITH 子句:指出视图的属性
select_statement:定义视图的SELECT语句,可在该语句中使用多个表或视图。
WITH CHECK OPTION:指出在视图上进行的修改都要符合select_statement所指定的准则。
2、更新视图
更新视图指通过视图插入、删除、修改数据,由于视图是不存储数据的虚表,对视图的更改最终转化为对基表的更新。
通过更新视图数据可更新基表数据,但只有满足可更新条件的视图才能更新,可更新视图必须满足的条件是创建视图的select语句没有聚合函数,且没有top、group by、union子句及distict关键字,不包含基表列通过计算所得的列,且from子句至少包含一个基本表。
3、删除视图
在T-SQL中使用drop view语句删除视图。
use 数据库名称 go drop view 视图名称
二、索引
数据库中的索引与书中的目录一样,可以快速找到表中的特定行。索引是与表关联的存储在磁盘上的单独结构,它包含由表中的一列或多列生成的键,以及映射到指定表行的存储位置的指针,这些键存储在一个结构(B树)中,使 SQL Server 可以快速有效地查找与键值关联的行。
建立索引的作用如下:
提高查询速度。
保证数据记录的唯一性。
查询优化依靠索引起作用。
提高ORDER BY、GROUP BY执行速度。
1、聚集索引
在聚集索引中,索引的顺序决定数据表中记录行的顺序,由于数据表中记录行经过排序,所以每个表只能有一个聚集索引。
表列定义了 PRIMARY KEY 约束和 UNIQUE 约束时,会自动创建索引。例如,如果创建了表并将一个特定列标识为主键,则 数据库引擎自动对该列创建 PRIMARY KEY 约束和索引。
2、非聚集索引
在非聚集索引中,索引的结构完全独立于数据行的结构,数据表中记录行的顺序和索引的顺序不相同,索引表仅仅包含指向数据表的指针,这些指针本身是有序,用于在表中快速定位数据行。一个表可以有多个非聚集索引。
3、创建索引语法格式:
CREATE [ UNIQUE ] / *指定索引是否唯一*/ [ CLUSTERED | NONCLUSTERED ] /*索引的组织方式*/ INDEX index_name /*索引名称*/ ON {[ database_name. [ schema_name ] . | schema_name. ] table_or_view_name}( column [ ASC | DESC ] [ ,...n ] ) /*索引定义的依据*/ [ INCLUDE ( column_name [ ,...n ] ) ] [ WITH ( <relational_index_option> [ ,...n ] ) ] /*索引选项*/ [ ON { partition_scheme_name ( column_name ) /*指定分区方案*/ | filegroup_name /*指定索引文件所在的文件组*/ | default}] [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ] /*指定FILESTREAM数据的位置*/[ ; ]
说明:
UNIQUE:表示表或视图创建唯一性索引。
CLUSTERED | NONCLUSTERED:指定聚集索引还是非聚集索引。 index_name:指定索引名称。 column:指定索引列。
ASC | DESC:指定升序还是降序。
INCLUDE子句:指定要添加到非聚集索引的叶级别的非键列。WITH子句:指定定义的索引选项。
ON partition_scheme_name:指定分区方案
ON filegroup_name:为指定文件组创建指定索引ON default:为默认文件组创建指定索引
4、删除索引
语 法 格 式 :
DROP INDEX { index_name ON table_or_view_name [ ,...n ] | table_or_view_name.index_name [ ,...n ] }
代码全部示例
-- 打开数据库 use sixstardb go -- 查询输出:数据表 select *from student select *from course select *from grade go ------------------------------------------------------------------------------------------------ -- 创建视图 -- 先判断创建视图名称是否存在 if exists(select *from sysobjects where id=object_id(N'student_course_grade_view')) drop view student_course_grade_view --删除视图 go -- 创建视图 create view student_course_grade_view as select student.sno,student.sname,student.ssex,course.cno,course.cname,grade.gno,grade.gmath,grade.genglish from student,course,grade where student.cno=course.cno and student.sno=grade.sno go -- 通过视图输出数据 select *from student_course_grade_view go -- 通过视图插入数据 use sixstardb go if exists(select *from sysobjects where id=object_id(N'course_view')) drop view course_view go create view course_view -- 创建课程表视图 as select course.cno,course.cname from course select *from course_view -- 通过视图输出数据 insert into course_view(cno,cname) values('08','模型') --通过视图插入数据 go update course_view set sno='1007' -- 通过视图修改数据 where cno=116 select *from course --查询输出基础表 -- 删除视图 drop view course_view go -- 通过视图删除记录 -- delete ------------------------------------------------------------------------------------------------ -- 索引 use sixstardb go select *from grade create index idx_gscore on grade(gmath) -- 创建索引 select *from idx_gscore drop index grade.idx_gscore --删除索引