事务,视图与索引
Posted 0A1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事务,视图与索引相关的知识,希望对你有一定的参考价值。
什么是事务?
事务是作为单个逻辑工作单元执行的一系列操作。
事务有四种属性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),及持久性(Durability)简称为(ACID)。
原子性:事务是一个完整的操作,事务的各个元素是不能分的(原子的)。
一致性:当事务完成时,数据必须处于一致状态。也就是说,在事务开始之前数据库中的数值处于一致状态。
隔离性:对数据进行修改的所有事务是彼此隔离的,这表明事务必须式独立的他不赢以任何方式依赖于或影响其他事务。
持久性:事务的持久性不管系统是否发生了故障,事务的处理结果是永久性的。
如何执行事务
1.执行事务语法
begin tran
这句显示地标记一个实物的起始点。
2.提交事务
commit tran
这句话标志一个事务成功结束。
3.回滚(撤销)事务。
rollback tran
清除自事务起始点至该语句所做所有丢数据的更新操作,将数据状态回滚到事务开始之前。
事务分为三种:显示事务,隐式事务,自动提交事务
1 create table Bank 2 ( 3 cradId int identity(1,1) primary key not null, 4 cardOwner nvarchar(32), 5 cardBalance numeric(18,2) 6 ) 7 8 9 alter table Bank 10 add constraint CK_cardBalance Check(cardBalance>1) 11 12 13 insert into Bank 14 values (‘张三‘,10000) 15 insert into Bank 16 values (‘李四‘,10) 17 18 19 select * from Bank 20 21 begin tran 22 declare @errorSum int 23 set @errorSum=0 24 update Bank set cardBalance-=500 25 where cradId=1 26 --记录错误号 27 set @errorSum+=@@ERROR 28 update Bank set cardBalance+=500 29 where cradId=2 30 31 32 set @errorSum+=@@ERROR 33 if(@errorSum>0) 34 begin 35 --其中一个操作错误,事物回滚 rollbank 36 rollback tran 37 38 end 39 else 40 begin 41 commit tran --提交 commit 42 end
视图
视图是保存在数据库中的select查询。视图是一种虚拟图表。
如何创建和使用视图
创建视图
单击 “新建视图” 进入
选取需要的表来执行操作
选取生成的代码来执行查询操作,会出现以下效果。
语法
create viewview_name
AS
<select语句>
如果对已经建立的视图进行查询代码修改,那么就需要删除已存在的同名数据,再从新创建。
使用T-SQL语句删除视图
语法
drop viewview_name
if exists( select * from sysobjects where name=‘view_name ‘ ) drop view view_name
使用T-SQL语句查看视图数据
语法
select col_name1,col_name2,.... from view_name
例如
1 --当前数据库 2 use MySchool 3 GO 4 --检测视图是否存在:视图记录存放在系统表sysobjects中 5 if exists (select * from sysobjects where name=‘vw_studet_result‘) 6 drop view vw_studebt_result 7 GO 8 --创建视图 9 create viewvw_student_result 10 as 11 select 姓名=StudentName,学号=StudentNo,成绩=StudentResult,课程名称=SubjectName,考试日期=ExamDate 12 from Student 13 Inner join result on Student.StudentNo=Result.StudentNo 14 inner join Subjrct on Result.StudentNo=Subject.SubjectNo 15 where Subject.Subject=( 16 secelt SubjectNo from SUBJECT WHERE SubjectName=‘JAVA Logic‘ 17 ) 18 and examDate=(select max (examDate) from Result,Subject 19 where Result.SubjectNo = Subject.SubjectNo 20 and SubjectName=‘JAVALogic‘) 21 GO 22 --查看结果 23 Select * fromvw_student_result
索引
索引是SQL Server 编排中的内部方法是检索表中数据的直接通道。
索引分类:
1.唯一索引 2.主键索引 3.聚集索引 4.非聚集索引 5.复合索引 6. 全文索引
创建索引
使用T-SQL语句创建索引
语法
create [UNIQUE] [CLUSERED|NONCLUSTERED] index index_name
on table_name (column_name[, col_name]...)
[WITH FILLFACTOR=X]
删除索引
语法
dropindextable_name.index_name
伤处索引时应注意以下几点:
1.删除表时该表的所有索引将同时被删除。
2.如果删除表中的所有索引,则先要删除非聚集索引,在删除聚集索引
use MySchool GO --检测是否存在索引 if exists (select name from sysindexes where name =‘ix_Student_StudentName‘) drop index Student.ix_Student_StudentName --删除索引 --创建非聚集索引;填充因子为30% create nonclustered index ix_Student_StudentName on Student (StudentName) where fillfactor = 30 GO
查看索引
1用系统存储过程sp_helplndex查看
语法
sp_helplndex table_name
例如:
exec sp_helplndexResult
2.用视图sys.indexes查看
语法
select * from sys.indexes
例如
use trainingbase
select * from sys.indexes
以上是关于事务,视图与索引的主要内容,如果未能解决你的问题,请参考以下文章
MySQL索引与事务,视图,存储引擎MylSAM和lnnoDB