T-SQL的事物、视图和索引

       事物,视图和索引

       技能掌握目标:

       1.使用事物保证操作的完整性

       2.掌握如何创建视图

       3.掌握如何创建并使用索引

首先我们要讲的是事物,那么问题来了,请问大家什么事物,他有什么作用?

带来了哪几大好处?分别是什么。

答案:事物就是把多件事情当做一件事情来处理的过程。也就是大家同在一条船上,要活一起活,要over一起over !,这也就是保证了事物的一致性和完整性。

其作用是保证事物的一致性,持久性,原子性,和隔离性。

1.一致性:就是当我们需要更新多条数据的时候,保证他们一荣俱荣,一损俱损。

就好比如,有啷个蚂蚱在同一条船上,如果船漏水了,两个蚂蚱都要死,如果船不漏水,那么两个蚂蚱都活下来

 

2.持久性:当数据库通过事物完成某种操作的时候,其结果和数据库的改变时永久保存在数据库中。

 

3.隔离性:事物的隔离性也就是保证了数据不会出现以下几个问题:

3.1.脏读

  解析:如果一个事务A对数据进行了更改,但是还没有提交,而另一个事务B就可以读到事务A尚未提交的更新结果。这样,当事务A进行回滚时,那么事务B开始读到的数据就是一笔脏数据。

3.2.不可重复读

  解析:不可重复读:同一个事务在事务过程中,对同一个数据进行读取操作,读取到的结果不同。例如,事务B在事务A的更新操作前读到的数据,跟在事务A提交此更新操作后读到的数据,可能不同。

3.3.幻读

  解析:同样一个查询在整个事务中多次执行,查询所得的结果不同。例如,事务A对全部记录做了更新操作,尚未提交前,事务B又插入了一条记录,那么事务A再次读取数据库时,会发现还有一条记录(即事务B新插入的记录)没有做更新。

 

   总体来说,隔离级别与系统并发性成反比,与数据一致性成正比

4.原子性:事务的原子性指的是,事务中包含的程序作为系统的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。原子性的意义是数据库系统的基础。

 

 

介绍完了什么是事物后,我给大家讲一下怎么使用事物:

它的语法是:

1.开始事物 :begin transaction

2.提交事物 :commit transaction

3.回滚事物 :rollback transaction

那么我带着大家写一个事物,让大家有直观的感受:

 

BEGIN tran

   DECLARE @count int

   SET @count=0

   --balance有约束,其的值不能小于1

   UPDATE cardInfo SET balance=0  where cardID=‘1010 3576 1212 1004‘ --错误的更新

   SET @count=@count+@@error --记录其上面语句的错误信息

 

 

   --接下来更新一条正确的信息

   UPDATE cardInfo SET balance =1000 WHERE cardID = ‘1010 3576 1212 1130‘ --正确的更新

   SET @count=@count+@@error --记录其上面语句的错误信息

      PRINT @count

   IF (@count<>0)

   begin

      print ‘交易失败,事物将进行回滚````‘

  rollback tran

   end

   else

   begin

      print ‘交易成功,事物将进行提交,谢谢合作!‘

  commit tran

   end

 

 

事物我就给大家讲到这里,接下来我们讲解视图

 

还是这个问题,既然要讲视图,那么就要了解视图,请问大家,什么是视图,视图都有哪些好处?

 

答案:

什么事视图

解析:视图是另一种查看数据库中一个或者多个表中的数据的方法,他是一个虚拟表,通常是作为来自一个或多个表的行或列的自己创建的。

通俗的说就是:视图是储存了一堆SQL语句的虚拟表,注意:在创建虚拟表的时候不可以使用UPDATE语句

视图都有哪些好处?

解析:好处有两个,分别是1.对最终用户的好处,就是说可以让用户更容易理解,获取数据更容易。2.对开发人员的好处,限制数据检索跟容易,维护应用程序更容易。

 

创建视图有两种方式,分别是使用T-SQL语句创建和使用手动创建。

接下来让我给大家使用两种方式分别创建视图,让大家有一个直观的好处。

第一种方式:

   --创建视图的T-SQL语句

   --检查视图是否存在,当视图存在的时候,吧该名称的视图删除,然后新建视图

   IF exists(SELECT * FROM sysobjects where name=‘vw_cardInfo_userInfo‘)

   DROP VIEW vw_carInfo_cuserInfo

   GO

   CREATE view vw_cardInfo_userInfo--创建视图的名称

   as

   select cardID AS 银行卡号,pass AS 密码,customerName AS 姓名 FROM cardInfo,userInfo

   WHERE userInfo.customerID=cardInfo.customerID

   GO

 

   SELECT * FROM vw_cardInfo_userInfo

第二种方式:

 

恩恩~~~相对来说我还是推荐大家使用第一种方式,使用T-SQL语句进行创建视同,因为这样会让大家看起来有点专业的感觉~~~~~~

 

好的 视图我们就讲到这里了,我们还剩下最后一个知识点,就是索引了。

既然讲到这里,那么问题来了,请大家回答一下,什么事索引?,索引分为几大类,分别是什么,最主要的两种是哪两种?

 

解析:索引就好比我们本书的目录,都有哪些章节,在第几页,更方便与我们的查找与应用,而无需我们一页一页的查找了。

分别分为6大类:

1.唯一索引 关键字unique是唯一索引的名字 创建唯一索引必须加上 unique

   use MyGongZuoZhanDian

--创建索引

GO

IF exists(SELECT * FROM sysindexes where name=‘IX_Detailed_Name‘)

 DROP INDEX Detailed.IX_Detailed_Name

 /*创建唯一索引*/

 CREATE unique index IX_Detailed_Name

 on Detailed(Name)

   WITH FILLFACTOR = 30

GO

 

 

/*调用*/

SELECT * FROM Admin

 WITH (INDEX=IX_Detailed_Name)

 where id>=0

   以下的调用方法和这个差不多,所以我也就不多写了~

2.主键索引

    聚集索引在你创建主键列 并且设置成自增列的时候 他会自动创建。

3.聚集索引

    use MyGongZuoZhanDian

--创建索引

GO

IF exists(SELECT * FROM sysindexes where name=‘IX_Detailed_Name‘)

 DROP INDEX Admin.IX_Detailed_Name

 /*创建聚集索引索引*/

 CREATE CLUSTERED index IX_Detailed_Name

 on admin(id)

   WITH FILLFACTOR = 30

GO

 

4.非聚集索引 关键字 nonclustered 是非聚集索引的名字 创建非聚集索引必须加上 nonclustered ,index 是创建索引的关键字,FILLFACTOR  是设置填充因子的关键字

  use MyGongZuoZhanDian

--创建索引

GO

IF exists(SELECT * FROM sysindexes where name=‘IX_Detailed_Name‘)

 DROP INDEX Detailed.IX_Detailed_Name

 /*创建非聚集索引*/

 CREATE nonclustered index IX_Detailed_Name

 on Detailed(Name)

   WITH FILLFACTOR = 30

GO

 

5.复合索引

   用户可以在多个列上建立索引,

这种索引叫做复合索引(组合索引)。复合索引的创建方法与创建单一索引的方法完全一样。但复合索引在数据库操作期间所需的开销更小,

可以代替多个单一索引。当表的行数远远大于索引键的数目时,使用这种方式可以明显加快表的查询速度。

6.全文索引

    全文索引与普通的索引不同,普通的索引是以B-tree结构来维护的,而全文索引是一种特殊类型的基于标记的功能性索引,是由Microsoft SQL Server全文引擎服务创建和维护的。使用全文索引可以快速、灵活地为存储在SQL Server数据库中的文本数据创建基于关键字查询的索引,与like语句不同,like语句的搜索是适用于字符模式的查询,而全文索引是根据特定语言的 规则对词和短语的搜索,是针对语言的搜索。

 

推广:http://www.cnblogs.com/fengyepiaoluo/p/4058050.html

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。