数据库之“事务”
2023-09-14 08:56:55 时间
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
事务是恢复和并发控制的基本单位。
事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
我为什么要使用事务? 俺这里再举个很俗很俗的例子:
俺到银行存钱,于是有这么几个步骤:
1、把钱交给工作人员;2、工作人员填单;3、将单子给我签字;4、工作人员确认并输入电脑。
要是,要是我把钱交给工作人员之后,进行到3我签字了。那哥们突然心脏病发作,over掉了,那,我的钱还没有输入电脑,但我却交了钱又签字确认了,而并没有其他任何记录。我岂不是要亏死了???我的血汗钱啊!赶紧退给我!!
于是,在数据库里产生了这么一个术语:事务(Transaction),也就是要么成功,要么失败,并恢复原状。
还是写程序把:
Create Proc sp我去存款(@M Money , @iOperator Int)
As
Begin
Declare @i int
Begin Tran --激活事务
Exec @i=sp交钱 @m,@iOperator
if @i<>0 --这里一般用系统错误号 @@Error。 我这里为了举例子没有用到。需要根据实际情况。
begin
Rollback Tran --回滚事务
RaisError ('银行的窗口太少了,我懒得排队,不交了!:( ', 16, 1) with Log --记录日志
Return -1 --返回错误号
end
Exec @i=sp填单 @m,@iOperator
if @i<>0
begin
Rollback Tran --回滚事务
RaisError ('银行的哥们打印机出了点毛病,打印不出单子来,把钱退回来给我吧??', 16, 1) with Log
Return -2
end
Exec @i=sp签字 @m
if @i<>0
begin
Rollback Tran --回滚事务
RaisError ('我 靠?什么烂银行,换了3支笔都写不出水来!!老子不存了!!不签!', 16, 1) with Log
Return -3
end
Exec @i=sp输入电脑 @m,@iOperator
if @i<>0
begin
Rollback Tran --回滚事务
RaisError ('什么意思?磁盘空间已满?好了好了,把钱给我,我到旁边的这家银行!', 16, 1) with Log
Return -4
end
Commit Tran --提交事务
Return 0
End
(转)
相关文章
- 用python连接数据库、索引、优化、事务
- MySQL数据库基础学习(七)
- 2022爱分析·事务型关系数据库市场厂商评估报告:万里数据库
- MySQL数据库的触发器和事务
- MYSQL事务隔离级别详解数据库
- 数据库事务的四个特性及含义详解数据库
- Linux环境下的数据库选择指南(linux选择数据库)
- 数据库UTF16编码数据在Oracle数据库中的应用(utf16Oracle)
- 利用Oracle触发器类型实现数据库管理最佳实践(oracle触发器类型)
- MySQL事务隔离:构建健壮的数据库行为(mysql事务隔离)
- MySQL数据库常见问题解决方案(mysql数据库常见问题)
- 从MSSQL到MySQL:一种数据库的转换(数据库类型 mssql)
- MSSQL数据库转换为文本文件的方法(mssql 转换为文本)
- 处理使用MSSQL实现跨数据库事务处理(mssql 跨数据事务)
- 深入解析mysql中的事务隔离级别,提升数据库并发性和数据一致性(mysql中事物隔离级别)
- Oracle事务日志清理一种优化数据库性能的方法(oracle事物日志清理)
- Oracle数据库中事务配置的必要性(oracle 事务配置)
- 查看Oracle数据库事务级别的实践(oracle事务级别查看)
- 模拟Oracle数据库事务处理过程(oracle事务模拟)
- Redis速度为王的高性能数据库(redis高性能数据库)
- Oracle XA连接实现跨数据库事务一致性(oracle xa连接)
- PHP数据库开发知多少
- sqlserver2000数据库备份还原的图文教程