什么是事务

事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元);

事务有四个特性

  1. 原子性
    事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做
  2. 一致性
    事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。
  3. 隔离性
    一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
  4. 持续性
    也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

实例

一个用事务进行转账的存储过程

create  proc cp_changeAcount(
@idOut int,
@idIn int,
@Remain decimal(18,2)
)
as
declare @error_nums int
set @error_nums=0
--开始事务
begin transaction tran_change
begin try
update [dbo].[Customers] set Remain=Remain-100 where ID='@idOut'
set @error_nums=@error_nums+@@error
update [dbo].[Customers] set Remain=Remain+100 where ID='@idIn'
set @error_nums=@error_nums+@@error
end try
begin catch
set @error_nums=@error_nums+1
print '错误异常'+convert(varchar(50),error_number()) +'错误消息'+error_message()
end catch
if(@error_nums>0)--表示有错,回滚
rollback transaction tran_change
else
 commit transaction tran_change

事务和存储过程的区别

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

很明显,他们的区别是:
事务是保存在项目里的,存储过程是保存在数据库里的。

事务中编程语言(java,C++等),存储过程中只有SQL语言。

总的来说事务有好有坏

事务优点
1,原子性、一致性、持久性通过数据库日志实现。
2,批处理数据库操作。

3,保证数据库级联操作的正确性。

事务缺点
1,执行较慢。
,2,需要较多的磁盘空间保存事务日志。

3,执行更新需要内存较多。