業務
まず、トランザクションは何ですか
1.1概念と要件情勢
- トランザクション(トランザクション)を行うワークの単一の論理ユニットとしての一連の動作であります
- 提出する全体として複数のオペレーティングシステムのいずれかのすべての実行中または実行しません
- トランザクションは、作業の論理単位です不可分
1.2特性トランザクション(ACID)
- アトミック(原子性):トランザクションが完了操作で、トランザクションの様々なステップの動作は不可分であり、それは、いずれかの実行実行するかしません
- 一貫性(一貫性):トランザクションが完了すると、データが一貫した状態でなければなりません
- 分離(隔離):独立して、同時トランザクションの間で互いに分離。それはどのような方法その他の事項で依存または影響を受けてはなりません
- (耐久性)永続:トランザクションが完了したら、そのデータベースを変更するには、永続的に保存されています
第二に、取引の分類
2.1ショー情勢
- BEGIN TRANSACTION開始と明らかに指定されたトランザクション
- 取引の最も一般的なタイプ
2.2暗黙的なトランザクション
- 通常、文の暗黙のトランザクションモードに設定されたSETのIMPLICIT_TRANSACTIONSがオープンに設定されています
- 自動的に新しいトランザクションを開始しますT-SQLステートメントで
- トランザクションがコミットまたはロールバックされた後、順番に次のT-SQL文は、新しいトランザクションを開始します
2.3自動的にトランザクションをコミットします
- SQL Serverのデフォルトモード
- トランザクションとして解釈される個々のT-SQLステートメント
第三には、トランザクションを作成します
--银行转账业务
DECLARE @ZHA INT=11004,@ZHB INT=11005,@Money INT=10,@errorSum INT=0
BEGIN TRANSACTION
BEGIN
UPDATE [User] SET CurrentMoney-=@Money WHERE ID=@ZHA
SET @errorSum+=@@ERROR --对错误进行累计
UPDATE [User] SET CurrentMoney+=@Money WHERE ID=@ZHB
SET @errorSum+=@@ERROR
IF(@errorSum>0)
BEGIN
PRINT '转账失败!'
ROLLBACK TRANSACTION ---事务回滚
END
ELSE
BEGIN
PRINT '转账成功!'
COMMIT TRANSACTION ----事务提交
END
END
文法
-
トランザクションを開始
BEGIN TRAN[SACTION]
-
トランザクションをコミットします
COMMIT TRANSACTION
-
トランザクションをロールバック(トランザクション後退)
ROLLBACK TRANSACTION
トランザクションがコミットまたはロールバックされると、トランザクションは終わりました
問題3.1の主要な取引
総務INSERT、UPDATEのうち、DELETE文では、リアルタイム追跡あり
ステートメントの実行エラーかどうかを決定する3.2方法
- グローバル変数@@ ERRORの使用
- @@ ERRORは、現在は、T-SQLステートメントを実行するかどうかを判断することは間違っています
- すべてのT-SQL文でトランザクションが間違っているかどうかを判断するためには、累積誤差することができ
第四に、使用する業務
CREATE PROC sp_BankZhuanZhang
@ZHA INT,
@ZHB INT,
@Money INT
AS
DECLARE @errorSum INT=0
BEGIN TRAN
BEGIN
UPDATE [User] SET CurrentMoney-=@Money WHERE ID=@ZHA
SET @errorSum+=@@ERROR
UPDATE [User] SET CurrentMoney+=@Money WHERE ID=@ZHB
SET @errorSum+=@@ERROR
IF(@errorSum>0)
BEGIN
PRINT '转账失败!'
ROLLBACK TRANSACTION ---事务回滚
END
ELSE
BEGIN
PRINT '转账成功!'
COMMIT TRANSACTION ----事务提交
END
END
EXEC sp_BankZhuanZhang '11004','11005','20'