数据库事务TRANSACTION
2016-04-06 16:36
218 查看
TRANSACTION 简单点说就是同生共死
比如说下表(bank)有个约束 ,pay不能小于10.
现在执行 下面两个SQL语句(把001的pay借给002)
①update bank set pay=pay-1000 where id='001'
②update bank set pay=pay+1000 where id='002'
有问题吗?
答案是有问题。001由于有限制,执行不能成功,但是002的不受影响,导致001的钱没少,而002的钱多了一千。
会出现下面的情况:
这种情况是不可以的。
我们想要得到的效果是 两个都成功的情况下数据库数据再进行操作。任何一个出问题,都不执行操作。
这个时候就要用到事务。
开始事务 BEGIN TRANSACTION
提交事务 COMMIT TRANSACTION
回滚事务 ROLLBACK TRANSACTION
比如新建一个查询:(@@ERROR 参考点击打开链接)
BEGIN TRANSACTION
DECLARE @errorSun INT --定义错误计数器
SET @errorSun=0 --没错为0
update bank set pay=pay-1000 where id='001'
SET @errorSun=@errorSun+@@ERROR --累计是否有错
update bank set pay=pay+1000 where id='002'
SET @errorSun=@errorSun+@@ERROR --累计是否有错
IF @errorSun<>0 --失败的场合
BEGIN
ROLLBACK TRANSACTION --事务回滚语句(这种时候上面所有语句是不执行的)
END
ELSE --成功的场合
BEGIN
COMMIT TRANSACTION --事务提交语句
END
end
比如说下表(bank)有个约束 ,pay不能小于10.
id | pay |
001 | 1000 |
002 | 500 |
①update bank set pay=pay-1000 where id='001'
②update bank set pay=pay+1000 where id='002'
有问题吗?
答案是有问题。001由于有限制,执行不能成功,但是002的不受影响,导致001的钱没少,而002的钱多了一千。
会出现下面的情况:
id | pay |
001 | 1000 |
002 | 1500 |
我们想要得到的效果是 两个都成功的情况下数据库数据再进行操作。任何一个出问题,都不执行操作。
这个时候就要用到事务。
开始事务 BEGIN TRANSACTION
提交事务 COMMIT TRANSACTION
回滚事务 ROLLBACK TRANSACTION
比如新建一个查询:(@@ERROR 参考点击打开链接)
BEGIN TRANSACTION
DECLARE @errorSun INT --定义错误计数器
SET @errorSun=0 --没错为0
update bank set pay=pay-1000 where id='001'
SET @errorSun=@errorSun+@@ERROR --累计是否有错
update bank set pay=pay+1000 where id='002'
SET @errorSun=@errorSun+@@ERROR --累计是否有错
IF @errorSun<>0 --失败的场合
BEGIN
ROLLBACK TRANSACTION --事务回滚语句(这种时候上面所有语句是不执行的)
END
ELSE --成功的场合
BEGIN
COMMIT TRANSACTION --事务提交语句
END
end
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马