SQL ——索引视图和事务

Posted 1219zy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 @[email protected]+@@ERROR
update Bank set cMoney=cMoney+800 where cName=李四 
set @[email protected]+@@ERROR
if @err>0  --条件
begin
print 交易失败!,事务回滚
rollback tran
end
else
begin
print 交易成功,事务提交!
commit tran
end

 结果:

技术分享图片

 如果不成功则为如下:

技术分享图片

 

以上是关于SQL ——索引视图和事务的主要内容,如果未能解决你的问题,请参考以下文章

CSIC_716_20191216事务视图触发器存储过程索引

014-MySQL_04-视图事务索引

Oracle事务和对象上集(视图索引)

SQL Server查询优化和事务处理

我如何从一个片段到另一个片段的列表视图适配器进行事务

联合分组子查询视图事务python操作mysql索引