diff --git "a/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/.keep" "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232/.keep" "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232/test.sql" "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232/test.sql" new file mode 100644 index 0000000000000000000000000000000000000000..882ea66e36697a724e0c9f4f0a9ae2f78e56224a --- /dev/null +++ "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/\344\275\234\344\270\232/test.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/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/\347\254\224\350\256\260/.keep" "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/\347\254\224\350\256\260/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/\347\254\224\350\256\260/2022-9-28-\344\272\213\345\212\241.md" "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/\347\254\224\350\256\260/2022-9-28-\344\272\213\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..6754aaf24e69b7ab863f948d9fd3c60d9d37914d --- /dev/null +++ "b/22 \346\235\250\345\207\214\347\277\224/\347\254\254\345\205\253\346\254\241\344\275\234\344\270\232/\347\254\224\350\256\260/2022-9-28-\344\272\213\345\212\241.md" @@ -0,0 +1,24 @@ +| 8、事务 | | | +| ------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | [2](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_2) | | +| | [3](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_3) | ### Transaction | +| | [4](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_4) | | +| | [5](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_5) | 一般来说,事务具有四个标准属性,分别是原子性(***\*A\****tomicity,或称不可分割性)、一致性(***\*C\****onsistency)、隔离性(***\*I\****solation,又称独立性)、持久性(***\*D\****urability),简称 ***\*ACID\****。 | +| | [6](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_6) | | +| | [7](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_7) | ***\*自动提交事物\****: 是SQL Server默认的一种事务模式,每条Sql语句都被看成一个事务进行处理。 | +| | [8](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_8) | | +| | [9](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_9) | ***\*显式事务\****: T-sql标明,由Begin Transaction开启事务开始,由Commit Transaction 提交事务、Rollback Transaction 回滚事务结束。 | +| | [10](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_10) | | +| | [11](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_11) | 开始语句 | +| | [12](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_12) | | +| | [13](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_13) | begin transaction | +| | [14](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_14) | | +| | [15](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_15) | 用@@errorr来判断是否回滚 | +| | [16](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_16) | | +| | [17](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_17) | 提交语句 | +| | [18](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_18) | | +| | [19](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_19) | commit transaction | +| | [20](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_20) | | +| | [21](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_21) | 回滚语句 | +| | [22](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_22) | | +| | [23](https://gitee.com/level-21-software-class-4/advanced-sql/pulls/301/files#7bafea43b5dcc0b69c03d5bb093d41943430655d_0_23) | rollback transaction | \ No newline at end of file