SQL事务
来源:互联网 发布:大数据专业大学排名 编辑:程序博客网 时间:2024/06/13 06:40
一、事务概念
事务是一种机制、是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行。因此事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的。这特别适用于多用户同时操作的数据通信系统。例如:订票、银行、保险公司以及证券交易系统等。
二、事务属性
事务4大属性:
1 原子性(Atomicity):事务是一个完整的操作。
2 一致性(Consistency):当事务完成时,数据必须处于一致状态。
3 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的。
4 持久性(Durability):事务完成后,它对于系统的影响是永久性的。
三、创建事务
T-SQL中管理事务的语句:
1 开始事务: begin transaction
2 提交事务:commit transaction
3 回滚事务: rollback transaction
事务分类:
1 显式事务:用begin transaction明确指定事务的开始。
2 隐性事务:打开隐性事务:set implicit_transactions on,当以隐性事务模式操作时,SQL Servler将在提交或回滚事务后自动启动新事务。无法描述事务的开始,只需要提交或回滚事务。
3 自动提交事务:SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。
--示例:张三转800元到李四帐户上。 use stuDBgo--创建帐户表bank--if exists(select* from sysobjects where name='bank') drop table bankcreate table bank( customerName char(10), --顾客姓名 currentMoney money --当前余额)go/**//*--添加约束,帐户不能少于元--*/alter table bank add constraint CK_currentMoney check(currentMoney>=1)/**//*--插入测试数据--*/insert into bank(customerName,currentMoney)select '张三',1000 unionselect '李四',1select * from bankgo/**//*--使用事务--*/use stuDBgo--恢复原来的数据--update bank set currentMoney=currentMoney-1000 where customerName='李'set nocount on --不显示受影响的行数print '查看转帐事务前的余额'select * from bankgo/**//*--开始事务--*/begin transactiondeclare @errorSum int --定义变量,用于累计事务执行过程中的错误/**//*--转帐--*/update bank set currentMoney=currentMoney-800 where customerName='张三'set @errorSum=@errorSum+@@error --累计是否有错误update bank set currentMoney=currentMoney+800 where customerName='李四'set @errorSum=@errorSum+@@error --累计是否有错误print '查看转帐事务过程中的余额'select * from bank/**//*--根据是否有错误,确定事务是提交还是回滚--*/if @errorSum>0 begin print '交易失败,回滚事务.' rollback transaction endelse begin print '交易成功,提交事务,写入硬盘,永久保存!' commit transaction endgoprint '查看转帐后的余额'select * from bankgo
0 0
- sql事务
- SQL事务
- sql事务
- SQL事务
- SQL --事务
- SQL事务
- SQL事务
- sql事务
- sql 事务
- sql事务
- SQL事务
- sql事务
- sql事务
- SQL事务
- SQL事务
- Sql 事务
- SQL事务
- sql 事务
- 160个CrackMe之001
- Jenkins+Maven+SVN快速搭建持续集成环境
- hdu 1863 畅通工程
- React-Native 之 Modal介绍与使用
- hdu 2124 Repair the Wall
- SQL事务
- HDU5701 中位数计数【中位数】
- ViewPager相互嵌套,导致里层ViewPager无法滑动问题解决
- 2017 蓝桥模拟 排列序数 康托展开
- Unity中使用Protobuffer探讨
- 线刷手机
- Log和Canny边缘检测能力对比(附Matlab程序)
- NYOJ116士兵杀敌(二)
- 远程服务器桌面登陆后黑屏或无法进行操作的解决办法