排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
分类:
SQL
前言
事务可以做什么?
保持逻辑数据一致性与可恢复性
事务的特性:事务具有原子性,一致性,隔离性,持久性(ACID)
A 原子性:事务必须是一个自动工作的单元,要么全部执行,要么全部不执行。
C 一致性:事务把数据库从一个一致状态带入到另一个一致状态,事务结束的时候,所有的内部数据都是正确的。
I 隔离性:并发多个事务时,一个事务的执行不受其他事务的影响。
D 持久性:事务提交之后,数据是永久性的,不可再回滚,不受关机等事件的影响。
事务在如下情况终止:
遇到rollback 或commit命令
遇到DDL或者DCL语句.
系统发生错误,崩溃或者退出。
事务分为三种:自动提交事务,显式事务,隐式事务
自动提交事务:
sqlserver每条Sql语句都被看成一个事务进行处理,例如一个update修改两个字段,不会出现一个成功一个失败,要么全部成功,要么全部失败
显式事务:
由Begin Transaction开启事务开始,由Commit Transaction 提交事务、Rollback Transaction 回滚事务结束
隐式事务:
使用Set IMPLICIT_TRANSACTIONS ON 将将隐式事务模式打开,不用Begin Transaction开启事务,当一个事务结束,
这个模式会自动启用下一个事务,只用Commit Transaction 提交事务、Rollback Transaction 回滚事务即可
常用的事务语句:
Begin Transaction:开启事务
Commit Transaction:提交事务
Rollback Transaction:回滚事务
Save Transaction:设置内部存储点,事务可以不全部回滚,只回滚到这里
定义一个事务
--开启事务 begin transaction _move begin --回滚事务 rollback transaction _move --数据正确过后提交事务 Commit Transaction _move end
模拟误删数据表(没回滚之前千万别提交事务)
进行删除这种危险操作的时候尽量带着事务,不然后悔莫及
--模拟数据库误删回滚(必须要开启事务) begin transaction databasedelete drop table 表 --回滚 rollback transaction databasedelete
模拟转账
--数据表 create table rmb ( id int primary key identity(1,1), sid varchar(10) , money int check (money >=0) ) insert rmb values('ns001',1000) insert rmb values('ns002',1000) insert rmb values('ns003',1000) insert rmb values('ns004',1000) insert rmb values('ns005',1000) insert rmb values('ns006',1000) --创建存储过程 create proc Moneys as begin declare @c1 int ,@c2 int declare @n1 varchar(10) = 'ns001' declare @n2 varchar(10) = 'ns002' select @c1= count(*) from rmb where sid = @n1 select @c2= count(*) from rmb where sid = @n2 --开启事务 begin transaction _move --判断数据是否异常 if(@c1=0 or @c2=0) print('账号错误') --回滚事务 rollback transaction _move end else begin update rmb set money = money + 100 where sid = @n1 update rmb set money = money - 100 where sid = @n2 --数据正确过后提交事务 Commit Transaction _move print('转账成功') end end --调用存储过程 execute Moneys;
评价