请教下大家在一个存储过程中要怎么写事务和锁(以及使用什么锁)呢?业务流程是:
现在有三张表:用户表usertb,系统帐户表systb,交易记录表recordtb.在交易中想做三件事
1.从usertb中的用户余额里减掉金额money -- update
2.在systb中的系统余额里加上金额money -- update
3.在recordtb中记录这次转帐(username,money,之前系统余额,交易后系统余额---最后两项从systb中取) -- insert对于这三个操作,我的理解是:1和2要放到一个事务中;1,2和3的操作要用到锁。
那把这三步放一个存储过程中的话,要怎么写事务和使用锁呢?以及使用哪种锁呢?请大家帮帮我,解决既送分,谢谢大家~
现在有三张表:用户表usertb,系统帐户表systb,交易记录表recordtb.在交易中想做三件事
1.从usertb中的用户余额里减掉金额money -- update
2.在systb中的系统余额里加上金额money -- update
3.在recordtb中记录这次转帐(username,money,之前系统余额,交易后系统余额---最后两项从systb中取) -- insert对于这三个操作,我的理解是:1和2要放到一个事务中;1,2和3的操作要用到锁。
那把这三步放一个存储过程中的话,要怎么写事务和使用锁呢?以及使用哪种锁呢?请大家帮帮我,解决既送分,谢谢大家~
set xact_abort onbegin tran--1、--2、--3、commit tran
刚试了一下,大概知道用法了
● 那对于锁的选择与使用,能否再请大家帮我一下
对于一个事务 如果没有完成 其对资源所施加的锁不会被释放
update、insert语句会对表加默认的锁规则 当然会和select语句对表加的锁不同
xact_abort的作用在于保证数据的完整性 即事务本身的特点