Sql事务

来源:互联网 发布:淘宝店装修步骤 编辑:程序博客网 时间:2024/05/29 17:57

  事务有4个属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability),也称作事务的ACID属性。

创建表 加入数据

CREATE TABLE Money

(
ID int NOT NULL PRIMARY KEY,
moneys money NULL
)
SELECT * FROM money
INSERT INTO money VALUES(1,2000),

(2,3000)


创建存储过程 使用存储过程完成事务


CREATE PROC pro_money(
@toID int , --转入账号
@fromID int,--转出账号
@Momery money)--转账金额
AS
--判断账号是否存在
IF EXISTS(SELECT 1 FROM money WHERE id=@fromID)
BEGIN
IF EXISTS(SELECT 1 FROM money WHERE id=@toID)
BEGIN
--判断转出金额是否大于当前余额
IF(SELECT moneys FROM money WHERE id=@fromID)>=@Momery
BEGIN
--开始 事务
BEGIN TRAN
UPDATE money SET moneys-=@Momery WHERE id=@fromID
UPDATE money SET moneys+=@Momery WHERE id=@toID
IF @@ERROR<>0
BEGIN
ROLLBACK TRAN --回滚
  PRINT '失败'
END 
  ELSE
BEGIN
  COMMIT TRAN --提交事务
PRINT '成功'
END


END
ELSE
RAISERROR('转账金额大于余额',16,1)   raiserror 是用于抛出一个错误
END
ELSE
RAISERROR('转出账号不存在',16,1)
END
ELSE
RAISERROR('转出账号不存在',16,1)




EXEC pro_money 2,3,1  --执行查询结果

0 0
原创粉丝点击