什么是事务
事务(transaction)是作为单个逻辑工作单元执行的一系列操作
这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行
事务时一个不可分割的工作逻辑单元
事务的特性 简称ACID属性
原子性(atomicity)
一致性(consistency)
隔离性(lsolation)
永久性(durability)
tsql使用下列语句来管理事务
开始事务:begin transaction
提交事务:commit transaction
回滚事务:rollback transaction
一旦事务提交或回滚,则事务结束
判断某条语句执行是否出错
使用全局变量@@error
@@error只能判断当前一条sql语句执行是否出错,为了判断事务中所有sql语句是否有错,我们需要对错误进行累加
如:set @errorSum += @@error
/*--如果创建事务*/
1 BEGIN TRANSACTION 2 DECLARE @errorSum int --定义变量,用于累计事务执行过程中的错误 3 SET @errorSum = 0 --初始化为0,即无错误 4 /*--转账:张三的账户少1000块,李四账户多1000块--*/ 5 update bank set currentMoney = currentMoney - 1000 6 where customerName = '张三' 7 set @errorSum += @@error 8 9 update bank set currentMoney += 1000 10 where customerName = '李四' 11 Set @errorSum += @@error --累计是否有错误 12 13 if @errorSum != 0 --如果有错误 14 begin 15 print '交易失败,回滚事务' 16 rollback transaction 17 end 18 else 19 begin 20 print '交易成功,提交事务,写入硬盘,永久的保存' 21 commit transaction 22 end 23 go 24 25 print '查看转账事务后的余额' 26 select * from bank 27 go
什么是索引
sql server 中的数据也是按页(4KB)存放
索引:是sql server编排数据的内部方法,它为sql server提供一种方法来编排查询数据
索引页:数据库中存储索引的数据也;索引页类似于汉语词典中按拼音或笔画排序的目录页
索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能
索引类型
唯一索引:唯一索引不允许两行具有相同的索引值
主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个只是唯一的,并且不能为空
聚集索引(clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个(一般是主键索引)
非聚集索引(non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个
使用tsql语句创建索引的语法:
create [unique] [clustered | nonclustered] index index_name
on table_name(column_name...)
[with fillfactor=x]
unique表示唯一索引,可选
clustered、nonclustered表示聚集索引还是非聚集索引,可选
fillfactor表示填充因子,指定一个0到100之间的值,该值指示索引页填满的空间所占的百分比,可选
1 use stuDB
2 go
3 if exists(select name from sysindexes where name = 'ix_writtenExam') 4 drop index stuMarks.ix_writttenExam 5 --笔试列创建非聚集索引,填充因子30% 6 create nonclustered index ix_writtenExam 7 on stuMarks(writtenExam) 8 with fillfactor = 30 9 go 10 --指定按索引 ix_writtenExam 查询 11 select * from stuMarks (index = ix_writtenExam) 12 where writtenExam between 60 and 90
索引的优缺点
优点
加快访问速度
加强行的唯一性
缺点
带索引的表在数据库中需要更多的存储空间
操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新
创建缩影的指导原则
请按照下列标准选择建立索引的列
该列用于频繁搜索
该列用于对数据进行排序
请不要使用下面的列创建索引
列中仅含几个不同的值
表中仅包含几行。为小型表创建索引可能不太划算,因为sql server在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长
视图
使用tsql语句创建视图
create view wiew_name
as
1 --如何创建视图
2 if exists(select * from sysobjects where name = 'view_stuInfo_stuMarks') 3 drop view view_stuInfo_stuMarks 4 go 5 create view view_stuInfo_stuMarks 6 as 7 select 姓名 = stuName, 学号 = stuInfo.stuNo, 笔试成绩 = writtenExam, 机试成绩 = labExam, 平均成绩 = (writtenExam + labExam) / 2 8 from stuinfo left join stuMarks 9 on stuInfo.stuNo = stuMarks.stuNo 10 go 11 select * from view_stuInfo_stuMarks