事务,视图,和索引
2016-03-12 18:30
344 查看
一.事务
1.什么是事务:事务是一种机制,一个操作序列,它包含一组数据库的操作命令。并把所有命令作为一个整体一起向系统提交或撤销操作请求
,要么这些数据库操作都执行,要不都不执行。同生共死同进退,事务是一个不可分割的整体。
2:事务的四种特性:原子性、一致性、隔离性、持久性
3:如何执行事务操作:1.开始事务:begin transaction
2.提交事务:commit transaction
3.回滚事务:rollback transaction
例如:转账问题假定张三的账户直接转账1000元到李四的账户上:
消息为:
结果为:
4:事物的分类:
1:显式事务:用begin transaction明确指定事物的开始(自己动手写的)
2:隐式事务:通过设置set implicit_transaction on 语句将隐式事务模式设置打开.当隐式事务操作时,SQL Server将在提交或回滚后自动启动新事务.不许描述开始,记得提交和回滚
3:自定义事务:将单独的T-SQL语句默认为一个事物.
二.视图
视图本质:视图是一张虚拟表,真正保存的是一堆SQL语句
创建视图的语法:
create view view_name
as
<SQL语句>
删除视图的语法:
drop view view_name
查看视图数据的语法:
select col_name1,col_name2,col_name3..........from view_name
例:使用T-SQL语句为教员创建查看'oop'课程最近一次考试成绩的视图,并通过视图查询结果
查询结果如图所示:
问题:能不能对视图进行增删改操作:(考试可以,面试不行)
视图可以嵌套
视图中的select后不能跟(
Order by ,除非有top关键字
不能有into
引用临时表或者是变量).
三.什么是索引:
1.索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据
2.索引分类:唯一索引、主键索引、聚集索引、非聚集索引、复合索引、全文索引
3.使用T-SQL语句创建索引:
create unique clustered|nonclustered index indexname
on table (column_name[,column_name]...)
[with fillfactor=x]
4.删除索引:drop index table_name.index_name
例:为学生姓名创建非聚集索引
如图结果为:
查看索引:
用系统储存过程sp_helpindex查看
sp_helpindex table_name
用视图sys.indexes查看
select * from sys.indexes
1.什么是事务:事务是一种机制,一个操作序列,它包含一组数据库的操作命令。并把所有命令作为一个整体一起向系统提交或撤销操作请求
,要么这些数据库操作都执行,要不都不执行。同生共死同进退,事务是一个不可分割的整体。
2:事务的四种特性:原子性、一致性、隔离性、持久性
3:如何执行事务操作:1.开始事务:begin transaction
2.提交事务:commit transaction
3.回滚事务:rollback transaction
例如:转账问题假定张三的账户直接转账1000元到李四的账户上:
use mybank create table bank ( cardId int primary key identity(1,1) not null, cardowner nvarchar(10) not null, moneyNum money ) go alter table bank add constraint CK_moneyNum check(moneyNum>=1) go insert into bank values('张三',1000) insert into bank values('李四',1) set nocount on print '查看转账前的余额' select * from bank go begin transaction --定义变量,用于累加事务执行中出现的错误 declare @errorSum int set @errorSum=0 update bank set moneyNum-=1000 where cardId=1 set @errorSum+=@@error update bank set moneyNum+=1000 where cardId=2 set @errorSum+=@@ERROR print '查看转账中的余额' select * from bank if(@errorSum<>0) begin print '交易失败,回滚事务' rollback transaction end else begin print '交易成功,提交事务' commit transaction end go print '查询账户余额' select * from bank go
消息为:
结果为:
4:事物的分类:
1:显式事务:用begin transaction明确指定事物的开始(自己动手写的)
2:隐式事务:通过设置set implicit_transaction on 语句将隐式事务模式设置打开.当隐式事务操作时,SQL Server将在提交或回滚后自动启动新事务.不许描述开始,记得提交和回滚
3:自定义事务:将单独的T-SQL语句默认为一个事物.
二.视图
视图本质:视图是一张虚拟表,真正保存的是一堆SQL语句
创建视图的语法:
create view view_name
as
<SQL语句>
删除视图的语法:
drop view view_name
查看视图数据的语法:
select col_name1,col_name2,col_name3..........from view_name
例:使用T-SQL语句为教员创建查看'oop'课程最近一次考试成绩的视图,并通过视图查询结果
use MySchool go if exists(select * from sysobjects where name='vw_studentresult') drop view vw_studentresult go create view vw_studentresult as select 姓名=Studentname,学号=student.studentNo,成绩=studentresult, 课程名称=subjectname,考试日期=examdate from student,Result,Subject where subject.SubjectId=(select SubjectId from Subject where SubjectName='oop') and examdate=(select max(ExamDate) from Result where SubjectId=(select SubjectId from Subject where SubjectName='oop')) go select * from vw_studentresult
查询结果如图所示:
问题:能不能对视图进行增删改操作:(考试可以,面试不行)
视图可以嵌套
视图中的select后不能跟(
Order by ,除非有top关键字
不能有into
引用临时表或者是变量).
三.什么是索引:
1.索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据
2.索引分类:唯一索引、主键索引、聚集索引、非聚集索引、复合索引、全文索引
3.使用T-SQL语句创建索引:
create unique clustered|nonclustered index indexname
on table (column_name[,column_name]...)
[with fillfactor=x]
4.删除索引:drop index table_name.index_name
例:为学生姓名创建非聚集索引
--创建索引 if exists(select name from sysindexes where name='IX_studentname') drop index.student.IX_studentname create nonclustered index IX_studentname on student(studentname) with fillfactor=30 go --查看数据 select * from Student with (index=IX_studentname) where StudentName like '张%'
如图结果为:
查看索引:
用系统储存过程sp_helpindex查看
sp_helpindex table_name
用视图sys.indexes查看
select * from sys.indexes
相关文章推荐