MSSQL 事务,视图,索引,存储过程,触发器

 

事务

事务是一种机制、是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行。

在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的。这特别适用于多用户同时操作的数据通信系统。例如:订票、银行、保险公司以及证券交易系统等。

如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库的永久组成部分,如果事务遇到错误且必须取消或回滚,则所有数据修改均会被清除。

开始事务  BEGIN TRANSACTION

提交事务  COMMIT TRANSACTION

回滚事务  ROLLBACK TRANSACTION

--开始事务
begin transaction
declare @errorSum int    --定义变量,用于累计事务执行过程中的错误
--转帐
update bank set currentMoney=currentMoney-800 where customerName='张三'
set @errorSum=@errorSum+@@error  --累计是否有错误
update bank set currentMoney=currentMoney+800 where customerName='李四'
set @errorSum=@errorSum+@@error  --累计是否有错误

print '查看转帐事务过程中的余额'
select * from bank

--根据是否有错误,确定事务是提交还是回滚
if @errorSum>0
    begin
        print '交易失败,回滚事务.'
        rollback transaction
    end
else
    begin
        print '交易成功,提交事务,写入硬盘,永久保存!'
        commit transaction
    end
go

索引

索引提供指向存储在表的指定列中的数据值的指针,然后根据指定的顺序对这些指针排序。

索引使数据库程序无需对整个表进行扫描,就可以在其中找到所需数据。

索引依赖于数据库的表,作为表的一个组成部分,一旦创建后,又数据库系统自身进行维护。

视图

视图和表类似,是一张虚拟表,通常是作为一个或多个表的行或列的子集创建的,视图只供查询,数据不可更改,查询数据来源于我们建立的实体表。

存储过程

存储过程的概念类似于函数,它是SQL语句和控制流语句的预编译集合。

存储过程存储在数据库内,可由应用程序调用。

存储过程的优点显而易见:封装复杂操作,节省编译优化时间,实现代码重用。

CREATE PROC 存储过程名

AS

BEGIN

SET NOCOUNT ON

--SQL语句

END

带有输出参数的存储过程,如果参数后面带有output,则表示此参数为输出参数,否则是普通的输入参数,输入参数可以带有默认值

CREATE PROC 存储过程名

@变量名 数据格式[=默认值] [OUTPUT]

AS

BEGIN

SET NOCOUNT ON

--SQL语句

END

调用存储过程:EXEC  存储过程名 [参数]

--调用后返回通过考试的学生人数,以供其他sql语句调用

CREATE PROCEDURE proc_withOutputpara

@subject varchar(10)='SQL',  --接受参数,带默认参数,变量之间带逗号

@count int output  --输出参数

AS

SELECT @count=count(*) FROM students S,Mark SC,course C

WHERE S.sID=SC.sID AND SC.cID=C.cID

AND C.cNAME='C#' AND SC.SCore<60

GO

--调用存储过程

DECLARE @count int,@sub varchar(10)  --声明变量

SET @sub='C#'

EXEC  proc_withOutputpara @sub,@count=@count output

PRINT @sub+'考试不及格的共有'+convert(varchar(2),@count)+'人'

GO

触发器

触发器是一种特殊类型的存储过程。

触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。

触发器的主要作用是实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。

CREATE TRIGGER 触发器名称

ON 表名

FOR insert/delete/update

AS

--SQL语句

GO

博客园hoojo博主关于触发器的详细介绍:http://www.cnblogs.com/hoojo/archive/2011/07/20/2111316.html

博主初学,有错还望各位大神指出。

转载请联系



转载请标明出处

作者:AaXuan

地址:http://www.cnblogs.com/Aaxuan

知识共享许可协议

本作品采用  知识共享署名 3.0 未本地化版本许可协议  进行许可。

原文地址:https://www.cnblogs.com/Aaxuan/p/6219080.html