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语句的搜索是适用于字符模式的查询,而全文索引是根据特定语言的 规则对词和短语的搜索,是针对语言的搜索。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。