diff --git "a/37\345\274\240\346\255\243\350\261\252/2022-09.28\344\272\213\345\212\241\345\274\240\346\255\243\350\261\252/\344\275\234\344\270\232/SQLQuery1.sql" "b/37\345\274\240\346\255\243\350\261\252/2022-09.28\344\272\213\345\212\241\345\274\240\346\255\243\350\261\252/\344\275\234\344\270\232/SQLQuery1.sql" new file mode 100644 index 0000000000000000000000000000000000000000..a5f759456aa302311c6b6b6f3434d7e38a16a30b --- /dev/null +++ "b/37\345\274\240\346\255\243\350\261\252/2022-09.28\344\272\213\345\212\241\345\274\240\346\255\243\350\261\252/\344\275\234\344\270\232/SQLQuery1.sql" @@ -0,0 +1,62 @@ +--1.--假设刘备取款6000,(添加check约束,设置账户余额必须>=0),要求:使用事务实现,修改余额和添加取款记录两步操作使用事务 +alter table BankCard add constraint CK_Money check(CardMoney >= 0) + +declare @myError int = 0 +declare @getMoney float = 6000 +declare @carID varchar(10) +declare @name varchar(10) +declare @Phone varchar(10) +set @name = '刘备' + +select @carID = (select b.CardNo from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name) +select @Phone = (select a.AccountPhone from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name) + +begin transaction A +update BankCard set CardMoney -= @getMoney where CardNo = @carID +set @myError += @@ERROR +insert into CardExchange values(@carID,0,@getMoney,getdate()) +set @myError += @@ERROR + +if(@myError = 0) +begin + commit transaction A +end +else +begin + rollback transaction B +end +go + +--2.--刘备向张飞转账1000元,(添加check约束,设置账户余额必须>=0) +alter table BankCard add constraint CK_Money check(CardMoney >= 0) +declare @myError int = 0 +declare @getMoney float = 1000 +declare @carID varchar(10) +declare @carID1 varchar(10) +declare @name varchar(10) +declare @name1 varchar(10) +declare @Phone varchar(10) +declare @Phone1 varchar(10) +set @name = '刘备' +set @name1 = '张飞' +select @carID = (select b.CardNo from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name) +select @Phone = (select a.AccountPhone from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name) +select @carID1 = (select b.CardNo from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name1) +select @Phone1 = (select a.AccountPhone from AccountInfo a inner join BankCard b on a.AccountId =b.AccountId where RealName = @name1) + +begin transaction +update BankCard set CardMoney -= @getMoney where CardNo = @carID +set @myError += @@ERROR +update BankCard set CardMoney += @getMoney where CardNo = @carID1 +set @myError += @@ERROR +insert into CardTransfer values(@carID,@carID1,@getMoney,getdate()) +set @myError += @@ERROR + +if(@myError = 0) +begin + commit transaction +end +else +begin + rollback transaction +end \ No newline at end of file diff --git "a/37\345\274\240\346\255\243\350\261\252/2022-09.28\344\272\213\345\212\241\345\274\240\346\255\243\350\261\252/\347\254\224\350\256\260/\347\254\224\350\256\260.txt" "b/37\345\274\240\346\255\243\350\261\252/2022-09.28\344\272\213\345\212\241\345\274\240\346\255\243\350\261\252/\347\254\224\350\256\260/\347\254\224\350\256\260.txt" new file mode 100644 index 0000000000000000000000000000000000000000..7d377537e15480fadec8b2bca60885249c4d32b9 --- /dev/null +++ "b/37\345\274\240\346\255\243\350\261\252/2022-09.28\344\272\213\345\212\241\345\274\240\346\255\243\350\261\252/\347\254\224\350\256\260/\347\254\224\350\256\260.txt" @@ -0,0 +1,23 @@ +8銆佷簨鍔 + +### Transaction + +涓鑸潵璇达紝浜嬪姟鍏锋湁鍥涗釜鏍囧噯灞炴э紝鍒嗗埆鏄師瀛愭э紙**A**tomicity锛屾垨绉颁笉鍙垎鍓叉э級銆佷竴鑷存э紙**C**onsistency锛夈侀殧绂绘э紙**I**solation锛屽張绉扮嫭绔嬫э級銆佹寔涔呮э紙**D**urability锛夛紝绠绉 **ACID**銆 + +**鑷姩鎻愪氦浜嬬墿**锛 鏄疭QL Server榛樿鐨勪竴绉嶄簨鍔℃ā寮忥紝姣忔潯Sql璇彞閮借鐪嬫垚涓涓簨鍔¤繘琛屽鐞嗐 + +**鏄惧紡浜嬪姟**: T-sql鏍囨槑锛岀敱Begin Transaction寮鍚簨鍔″紑濮嬶紝鐢盋ommit Transaction 鎻愪氦浜嬪姟銆丷ollback Transaction 鍥炴粴浜嬪姟缁撴潫銆 + +寮濮嬭鍙 + + begin transaction + +鐢ˊ@errorr鏉ュ垽鏂槸鍚﹀洖婊 + +鎻愪氦璇彞 + + commit transaction + +鍥炴粴璇彞 + + rollback transaction \ No newline at end of file