事务(Transaction)
属性
原子性(Atomicity) 事务必须是原子工作单元。对于其数据修改,要么全都执行,要么全都不执行。
一致性(Consistency 事务在完成时,必须使所有的数据都保持一致状态。
隔离性(Isolation) 由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。
持久性(Durability ) 事务完成之后,它对于系统的影响是永久性的。
创建银行表代码
--创建表
if exists(select * from bank )
drop table bank
create table bank
(
名字 char(10),
钱包 int
)
go
--添加约束:钱包不能少于0元
alter table bank
add constraint ck_钱包 check (钱包>=0)
go
--插入数据:张三账户余额为1000元,李四账户余额为1元
insert into bank values ('张三',1000),('李四',1);
go
--查看结果
select * from bank
建表和建事务的代码块可以复制在一起啦 ctrl+c
直接crtl+A运行没问题😍
创建银行转账事务
go
begin transaction
--定义,用于累计事务执行过程中的错误
declare @errorSum int
set @errorSum=0 --初始化为0,即默认代表无错误
update bank set 钱包=钱包-1000 where 名字='张三'
set @errorSum=@@ERROR+@errorSum
update bank set 钱包=钱包+1000 where 名字='李四'
set @errorSum=@@ERROR+@errorSum
print '查看转账后的账户'
select * from bank
--回滚意味着撤销尚未保存到物理数据库中的操作
if @errorSum<>0 --非零
begin
print '交易失败,回滚事务'
rollback transaction
end
else
begin
print '交易成功,提交事务,写入硬盘,永久的保存'
commit transaction
end
go
print '查看转账事务后的余额'
select * from bank
go
运行结果
屏幕前的程序猿们,你们的赞就是我坚持的动力
苦尽甘来的那一天,山月星河都为你化作赞礼!