SQL ——索引、视图和事务
一、索引:
1、概述:索引和视图主要起到辅助查询和组织数据的功能。可以提高查询的效率,索引是数据库规划和系统维护的一个关键部分。
1.1索引结构:索引是一个单独的、物理的数据库结构,索引依赖于表建立,它提供了数据库中编排表中数据的内方法
1.2 B-树(平衡树)
B-树的顶端节点称为根节点。索引中的底层节点称为叶节点。根节点于叶节点之间的任何索引级别统称为中间级
1.3索引类型
1.3.1、聚集索引:定义了数据在表中存储的物理顺序。只能有一个
1.3.2、非聚集索引:并不存储表数据本身,在一个表中可以同时存在多个非聚集索引。
1.4 T-SQL创建索引
--T-SQL 创建索引 --给学员信息表创建一个索引:按年龄升序,年龄相同的再按姓名降序 if exists(select * from sys.indexes where name='IX_stuInfo_AgeName') drop index stuInfo.IX_stuInfo_AgeName go create nonclustered index IX_stuInfo_AgeName on stuInfo(age,stuname desc) --使用索引IX_stuInfo_AgeName查询学员信息 select * from StuInfo with(index=IX_stuInfo_AgeName)
或者:
--给学员创建一个索引:按笔试成绩降序,笔试成绩相同再机试成绩降序 if OBJECT_ID('IX_Exam_Score') is not null drop index Exam.IX_Exam_Score go create nonclustered index IX_Exam_Score on Exam(WriteExam desc,LabExam desc) with fillfactor=30 --使用索引IX_Exam_Score查询学员信息 select * from Exam with(index=IX_Exam_Score)
1.5 新建删除索引
1)、重新生成索引:
ALTER INDEX index_name ON table_or_view_name REBUILD
2)、重新组织索引
ALTER INDEX index_name ON table_or_view_name RGORGANIZE
3)、禁用索引
ALTER INDEX index_name ON table_or_view_name DISABLE
4)、删除索引
DROP INDEX <table or view name>.<index name>
或者:
DROP INDEX <index name> ON <table or view name>
1.6 索引的优缺点
优点:加快访问速度、加强行的唯一性
缺点:1、带索引的表在数据库中需要更多的存储空间
2、更新数据的命令需要更长的出来时间,因为它们需要对索引进行更新
二、视图
A、概述:视图是一种数据库对象,是从一个或多个基表(或视图)导出的虚表。
B、视图的用途:
1、筛选表中的行
2、防止未经许可的用户访问敏感数据
3、降低数据库的重复程度
4、将多个物理数据库抽象为一个逻辑数据库
C、创建视图
语法格式如下:
CREATE VIEW [schema_name . ] view_name [(column [,……n])] [WITH <view_attribute>[,……n]] AS select_statement [WITH CHECK OPTION] 其中: <view_attribute> ::={[ENCRYPTION] [SCHEMABINDING] [VIEW_METADATA]}
示例:
if exists(select * from sys.views where name='vw_Goods') drop view vw_Goods go create view vw_Goods as select TypeName 类型名称,Name 商品名称,Price 价钱,ProductionDate 生产日期 from Goods gs,GoodsType gt where gs.TypeId=gt.TypeId and ProductionDate like '%2017%' --YEAR(ProductionDate)=2017 go select * from vw_Goods
三、事务
1、事务的ACID属性
a)原子性:一个事务对数据库的所有操作,是一个不可分割的工作单元,这些操作要摸全班执行,要么什么也不做。保证原子性是数据库系统本身的职责,DBMS的事务管理子系统来实现
b)一致性:一个事务独立执行的结果应保持数据库的一致性,即数据不会因为事务的执行而遭受破坏。
c)隔离性:在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样。此时称事务达到了隔离性的要求。
d)持久性(永久性):一个事务一旦完成全部操作后,它对数据库的所有更新应永久地反应在数据库中,即使系统发生故障后,也应该保留这个事务执行的痕迹。
2、事务的状态
活动状态:初始状态,事务能够执行时处理这个状态
部分提交状态:最后一天语句北执行之后
失败状态:发现正常的执行不能继续之后
中止状态:事务回滚并且数据库已被恢复到事务开始执行前的状态之后
提交状态:成功完成之后
3、事务的分类
显式事务、隐性事务、自动提交事务
4、事务的语法
BEGIN TRANSACTION——开启事务
COMMIT TRANSACTION ——提交事务
ROLLBACK TRANSACTION——回滚事务
例子:
--转账事务 --实现张三转账800给李四 begin transaction declare @err int=0--声明一个整型变量,初值为0 update Bank set cMoney=cMoney-800 where cName='张三' set @err=@err+@@ERROR update Bank set cMoney=cMoney+800 where cName='李四' set @err=@err+@@ERROR if @err>0 --条件 begin print '交易失败!,事务回滚' rollback tran end else begin print '交易成功,事务提交!' commit tran end
结果:
如果不成功则为如下: