一、存储过程

存储过程:就像函数一样的
会保存在:数据库中--》可编程性 --》 存储过程

创建存储过程:
create proc JiaFa --存储关键字proc

@a int,               --需要的参数
@b int

as
                         --存储过程的内容
declare @c int;
set @c = @a + @b;
return @c;
go                     --执行完毕后全部选中,执行创建

执行存储过程:关键字exec
exec JiaFa 3,5;              --无返回值时

declare @f int;               --有返回值时
exec @f = JiaFa 3,5;       --存储名后面填参数
print @f;

例:根据用户传入的参数查询汽车表符合该条件的汽车数量
create proc ChaXun       --创建存储过程
@n varchar(20)
as
declare @num int
select @num = count(*) from car where name like '%'+@n+'%'
return @num
go

declare @m int              --执行存储过程
exec @m = ChaXun '奥迪'
print @m

二、触发器

是一个特殊的存储过程    通过增删改的动作来触发执行,没有参数,没有返回值

满足条件时执行,否则不执行

create trigger Insert _Student            --命名规范  关键字:tigger  注意下划线

                     Insert/delete/update_表名   在[表名]表 添加/删除/修改 数据是执行

on student                                        --针对于哪一个表    on

for /instead of   insert                      --针对于哪一个动作来触发   for     同js: onclick = "show()"

as

触发执行的代码段 触发过程
go

※ for的意思是在动作执行之后触发

※ instead of delete 的意思是删除之前引发,可以理解为替代,写了这个之后,写的执行代码就没有用了,就被触发器的代码覆盖了

例:

create trigger Delete_Info

on info
instead of delete
as
declare @c varchar(20)
select @c = code from deleted

delete from work where infocode=@c
delete from family where infocode=@c
delete from info where code=@c
go

触发器常用的为级联删除

例:
create trigger delete_student
on student
instead of delete
as
--如果要删除student表数据,那么需要级联删除
declare @sno varchar(20);
set @sno = sno from deleted      --deleted固定格式,为删除执行所能删除的数据,并没有执行删除,而是把他们显示出来,在这获得要删除的数据的sno,

                   然后先删除其他表中此sno的数据
delete from score where sno = @sno;
delete from student where sno = @sno;
go

三、事务

保障流程的完整执行 (两条多条sql语句要么同时成功,要么同时失败)

例:就像银行取钱,先在你账上扣钱,然后存入别人的账上,但是从你账上扣完钱了,突然网断了,对方没有收到钱,那么此时你的钱也没了,别人的钱也没加上,为了防止此类情况的出现,事务。

begin tran               --在流程开始的位置

  sql语句

if @@ERROR>0           --判断是否有错误
begin
  rollback tran          --回滚事务,到begin tran的位置,就当没发生过
end
else
begin
  commit tran           --提交事务,都没问题,那么就一把进行提交
end

例:购物车实例

begin tran                                       --开启事务
declare @tran_error int;                   --存储错误
set @tran_error = 0;                       --默认没有错误

update Fruit set Numbers = Numbers-1 where Ids='k002'
set @tran_error = @tran_error + @@ERROR;
update Login set Account=Account-1 where UserName='wangwu'
set @tran_error = @tran_error + @@ERROR;
insert into Orders values('d002','wangwu','2016-8-7')
set @tran_error = @tran_error + @@ERROR;
insert into OrderDetails values('d002','k002',10)
set @tran_error = @tran_error + @@ERROR;

if @tran_error>0
begin
rollback tran                                   --回滚事务,到begin tran的位置,就当没发生过
end
else
begin
commit tran                                   --提交事务,都没问题,那么就一把进行提交
end

SQL 存储过程 触发器 事务的更多相关文章

  1. SQL 存储过程中事务回滚

    在事务语句最前面加上 set xact_abort on GO SET QUOTED_IDENTIFIER OFF GO ALTER PROCEDURE [dbo].[test] @a int, @b ...

  2. SQL Server T—SQL 存储过程 触发器

    一.存储过程 存储过程是一组编译在单个执行计划中的T-SQL语句 存储过程:就像函数一样的会保存在数据库中(可编程性) 存储过程的优点: 1.允许模块化程序设计 2.允许更快执行如果某操作需要大量T- ...

  3. SQL 存储过程加事务的使用

    create proc USP_CUTTING_TATABLET_PULL_FINISH ( @name NVARCHAR(20) ) as SET XACT_ABORT ON--设置全盘回滚 BEG ...

  4. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

  5. mysql-存储过程-触发器-事务---4

    本节所讲内容: 存储过程   触发器 事务 一.存储过程 什么是存储过程 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成.存储过程(S ...

  6. sql之视图、触发器、函数、存储过程、事务

    视图 # 视图也是一张表,但在data文件里只有表结构,没有表数据 # 不建议使用,扩展性差,程序需改变时,依赖的视图也要改变 # 视图牵涉到多张表时,视图中的记录不能修改. create view ...

  7. python操作MySQL,SQL注入的问题,SQL语句补充,视图触发器存储过程,事务,流程控制,函数

    python操作MySQL 使用过程: 引用API模块 获取与数据库的连接 执行sql语句与存储过程 关闭数据库连接 由于能操作MySQL的模块是第三方模块,我们需要pip安装. pip3 insta ...

  8. SQL 存储过程入门(事务)(四)

    SQL 存储过程入门(事务)(四)   本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我 ...

  9. Python全栈开发之MySQL(三)视图,存储过程触发器,函数,事务,索引

    一:视图 1:什么是视图? 视图是指存储在数据库中的查询的SQL语句,具有简单.安全.逻辑数据独立性的作用及视点集中简化操作定制数据安全性的优点.视图包含一系列带有名称的列和行数据.但是,视图并不在数 ...

随机推荐

  1. [JSP] c:forEach 如何输出序号 - luotangsha的专栏 - 博客频道 - CSDN.NET

    [JSP] c:forEach 如何输出序号 分类: JSP 2011-06-24 01:36 13018人阅读 评论(2) 收藏 举报 jspcbordertable 关键在于<c:forEa ...

  2. losbyday Linux查找命令

    PS:第一次发表博客,试一下水,晚一点修改文本格式 linux下的命令都存放在/bin /sbin /usr/bin /usr/sbin路径下等echo $PATH which 是用来查询命令存放的路 ...

  3. 变量-数据类型-对象-如何编写python脚本

    标识符的命名规则变量是标识符的例子. 标识符 是用来标识 某样东西 的名字.在命名标识符的时候,你要遵循这些规则:标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’).标识 ...

  4. [Cocos2d-x]Lua 资源热更新

    什么是热更新 所谓的热更新,指的是客户端的更新. 大致的流程是,客户端在启动后访问更新的URL接口,根据更新接口的反馈,下载更新资源,然后使用新的资源启动客户端,或者直接使用新资源不重启客户端. 热更 ...

  5. 在阿里云ECS(CentOS6.5)上安装redis

    下载所需的redis 命令: wget http://download.redis.io/releases/redis-3.0.7.tar.gz 结果: 解压redis压缩文件: 命令: .tar.g ...

  6. BCB实现BMP图片的RGB分解(转)

    源:BCB实现BMP图片的RGB分解 1.打开BMP图片文件,在Image控件中显示: if(dlgOpen1->Execute()) { edt1->Text=dlgOpen1-> ...

  7. sed与正则用法收集

    1.将文本每行最后七个字符换成!号 sed   -n  's#.\{7\}$#!#p' ooo 在文本的每一行前添加#符号 sed  's/^.\?/#&/' passwd &  替代 ...

  8. 【转】15款Java程序员必备的开发工具

    如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过.这是一款商业级的编程语言,我们没有办法不接触它. 对于Java,有两种截然不同的观点:一种认为Java是最简单功能 ...

  9. Tessnet2图片识别(2)

    1. 引用 tessnet2.dll (只有NET2.0版本) 2. 视图页 <%@ Page Language="C#" MasterPageFile="~/Vi ...

  10. ul中li分列显示

    让ul中li分列显示,用li显示两列如下(要显视多列的自己想办法,哈哈): 2列 <ul> <li style="display:block;float:left;widt ...