数据库事务简介与实例

什么是数据库事务?

数据库事务是指作为单个逻辑工作单元执行的一系列操作。具体表现为:可以将几个sql语句作为一个整体来执行,这些sql语句当有一条执行出错时,那么所有的sql语句都将执行失败。也就是这些sql语句作为一个整体,要么全部执行成功,要么全部执行失败。使用事务能便于恢复数据,保证数据的一致性。

一 事务的属性

事务具有ACID属性

即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性

原子性

就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全回滚,全部不保留

一致性

事务完成或者撤销后,都应该处于一致的状态。

隔离性

多个事务同时进行,它们之间应该互不干扰。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

永久性

事务提交以后,所做的工作就被永久的保存下来

事务实例:

create procedure TransferMoeny

(

@FromAccountNo varchar(50),-- 转出账号

@ToAccountNo varchar(50),--转入账号

@MoneyCount money--转账金额

)

as

--判断账号是否存在

if exists (select 1 from 帐户表 where 账号 = @FromAccountNo)

begin

if exists (select 1 from 帐户表 where 账号 = @ToAccountNo)

begin

--判断转出金额是否大于当前余额

if (select 当前余额 from 帐户表 where 账号 = @FromAccountNo) >= @MoneyCount

begin

--开始转账

begin transaction

insert into [存取记录表] ([账号],[存取类型], [存取金额]) values(@FromAccountNo, -1,@MoneyCount)

if @@error <> 0

begin

rollback transaction--发生错误则回滚事务,无条件退出l

return

end

insert into [存取记录表] ([账号],[存取类型], [存取金额]) values(@ToAccountNo, 1,@MoneyCount)

if @@error <> 0

begin

rollback tran

return

end

commit transaction --两条语句都完成,提交事务

end

else

raiserror (‘转账金额不能大于该账号的余额‘,16,1)

end

else

raiserror (‘转入账号不存在‘,16,1)

end

else

raiserror (‘转出账号不存在‘,16,1)

时间: 2024-10-10 21:58:27

数据库事务简介与实例的相关文章

[Sqlite]--&gt;嵌入式数据库事务理解以及实例操作

SQLite 事务(Transaction) 事务(Transaction)是一个对数据库执行工作单元.事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成. 事务(Transaction)是指一个或多个更改数据库的扩展.例如,如果您正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么您正在该表上执行事务.重要的是要控制事务以确保数据的完整性和处理数据库错误. 实际上,您可以把许多的 SQLite 查询联合成一组,把所

数据库触发器简介与实例

触发器 其是一种特殊的存储过程.一般的存储过程是通过存储过程名直接调用,而触发器主要是 通过事件(增.删.改)进行触发而被执行的.其在表中数据发生变化时自动强制执行. 常见的触发器有两种:after(for).instead of,用于insert.update.delete事件. after(for)        表示执行代码后,执行触发器 instead of        表示执行代码前,用已经写好的触发器代替你的操作 触发器语法: create trigger 触发器的名字   on

数据库存储过程简介与实例

一.存储过程与函数的区别: 1.一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强. 2.对于存储过程来说可以返回参数(output),而函数只能返回值或者表对象. 3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面. 二.存储过程的优点: 1.执行速度更快 – 在数据库中保存的存储过程语句都是编译过的 2.允许模块化程序设计 – 类似方法的复用 3.提高系统安全性 –

如何将一个操作“绑定到数据库事务上”

摘要 spring-cache简介 基本机制 事务上下文中的问题 将操作绑定到数据库事务上 spring-cache的相关实现 TransactionSynchronizationManager和TransactionSynchronizationAdapter 事务相关操作注册与回调流程 其它应用 摘要 在开发中,我们常常会遇到(或者需要)把一些操作"绑定到数据库事务上".也就是说,如果数据库事务成功提交,则执行这个操作:如果数据库事务回滚,则不执行这个操作(或者执行另一个操作).

Mysql数据库理论基础之八--数据库事务

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

【面试必备】快速理解数据库事务隔离级别

图片显示异常可前往https://juejin.im/post/5d5575dde51d4561a705badd查看 事务简介 相信用过MySQL的朋友都知道事务,我们也常常通过这个例子来讲解事务的作用:A向B转账,这里可以分为两步操作数据库,A账户余额减少,B账户余额增加.但是,如果在A账户余额减少的时候突然出现了数据库宕机了等情况,是不是会出现A的余额变少了,但是B的余额却没有增加的情况呢?答案是否定的.原因就是数据库支持事务(常用的关系型数据,如MySQL.Oracle等). 事务是应用程

数据库事务的四大特性和事务隔离级别

Reference: [1] http://www.cnblogs.com/fjdingsd/p/5273008.html [2] http://blog.csdn.net/fg2006/article/details/6937413 数据库事务四大特性 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全

mysql数据库分区功能及实例详解

分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解 一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例.mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存

MySQL数据库事务隔离级别(Transaction Isolation Level)

今天在学习JDBC的时候看到了关于MySql的事务的隔离级别的问题,感觉内容挺高级的,所以记录一篇文章,以备后面使用. 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. 2 [mysqld] 3 transaction-isolation = R