Chapter 5. 事务、触发器、存储过程

=====事务=====

使用事务来保证多条SQL语句同时执行成功或者同时执行失败

1、打开一个事务:begin transaction

2、只要有任何一条SQL语句执行出错,最后的结果就会出错

    程序回滚:rollback transaction

3、如果没有出错

    提交该事务:commit transaction

使用@error全局变量来判断是否出错

分类:

自动提交事务:

当执行语句时,数据库自动打开事务,不出错数据库自动提交事务,出错数据库自动回滚

隐式事务:

每次执行一条SQL语句的时候,数据库自动打开一个事务,但是需要手动提交或者回滚事务

语法:set implicit_transaction (on / off)

显示事务:

每次执行一条SQL语句的时候,需要手动打开事务,手动提交事务或者回滚事务

begin tran

...

commit tran

...

rollback tran

ACID特性:

原子性:事务必须是原子工作单元;对于其数据修改,要么全部执行,要么全部不执行

一致性:在事务执行之前和执行之后,数据保持一致

隔离性:由并发事务所作的修改必须与任何其他并发事务所做的修改隔离

持久性:事务完成后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

====== 存储过程 ======

和C#里的方法一样,由存储过程名、存储过程参数组成,可以有返回值。

if else、while、变量、insert、select都可以在存储过程中使用

优点:

执行速度更快:在数据中保存的存储过程语句都是编译过的

允许模块化程序设计:类似方法的复用

提高系统安全性:防止SQL注入

减少网络流通量:只要传输、存储过程的名称

分类:

系统存储过程:sp_ ...

1、返回当前实例中的所有数据库的基本信息

  sp_database

2、返回当前数据库中的所有的表

  sp_table

3、返回某个表下的所有的列

  sp_columns 列名

4、查看某个存储过程

  sp_helptext '...'

自定义存储过程:usp_ ...

create proc 名称  --创建

as

begin

  语句

end

exec proc 名称 --调用

drop proc 名称 --删除

===== 触发器 =====

作用:自动化操作,减少了手动操作以及出错的几率

触发器是一种特殊类型的存储过程,不同于前面介绍的一般的存储过程。(在SQL内部把触发器看作是存储过程但是不能传递参数)

一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。

触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行。

触发器可以用于SQL Server约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。

在SQL Server里,触发器就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。

分类:

DML触发器:

insert 执行插入操作,使用inserted表

delete 执行删除操作,使用deleted表

update  执行更新操作,同时使用inserted和deleted表

after(for)在语句执行完毕之后触发,按语句触发,而不是所影响的行数,

                无论所影响多少行,只触发一次。可以递归触发,最高32级

instead of 用来替换原来的操作,不会递归触发,可以在约束被检查之前触发

DDL触发器:

create table

create database

alter

drop

原文地址:https://www.cnblogs.com/xiao55/p/5584230.html