菜的像徐坤
排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

sql事务

4751人阅读 2021/5/25 9:53 总访问:961103 评论:0 收藏:0 手机
分类: SQL

前言

事务可以做什么?
保持逻辑数据一致性与可恢复性

事务的特性事务具有原子性,一致性,隔离性,持久性(ACID)

  • A 原子性:事务必须是一个自动工作的单元,要么全部执行,要么全部不执行。

  • C 一致性:事务把数据库从一个一致状态带入到另一个一致状态,事务结束的时候,所有的内部数据都是正确的。

  • I 隔离性:并发多个事务时,一个事务的执行不受其他事务的影响。

  • D 持久性:事务提交之后,数据是永久性的,不可再回滚,不受关机等事件的影响。


事务在如下情况终止:

  1. 遇到rollback commit命令

  2. 遇到DDL或者DCL语句.

  3. 系统发生错误,崩溃或者退出。


事务分为三种:自动提交事务,显式事务,隐式事务
自动提交事务
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:设置内部存储点,事务可以不全部回滚,只回滚到这里

定义一个事务

  1. --开启事务
  2. begin transaction _move 
  3. begin
  4. --回滚事务
  5. rollback transaction _move 
  6. --数据正确过后提交事务
  7. Commit Transaction _move
  8. end

模拟误删数据表(没回滚之前千万别提交事务)

进行删除这种危险操作的时候尽量带着事务,不然后悔莫及

  1. --模拟数据库误删回滚(必须要开启事务)
  2. begin transaction databasedelete
  3. drop table 表
  4. --回滚
  5. rollback transaction databasedelete

模拟转账

  1. --数据表
  2. create table rmb 
  3. (
  4. id int primary key identity(1,1),
  5. sid varchar(10) ,
  6. money int check (money >=0
  7. )
  8. insert rmb values('ns001',1000)
  9. insert rmb values('ns002',1000)
  10. insert rmb values('ns003',1000)
  11. insert rmb values('ns004',1000)
  12. insert rmb values('ns005',1000)
  13. insert rmb values('ns006',1000)
  14. --创建存储过程
  15. create proc Moneys
  16. as
  17. begin
  18.  declare @c1 int ,@c2 int
  19.  declare @n1 varchar(10) = 'ns001'
  20.  declare @n2 varchar(10) = 'ns002'
  21.          select @c1= count(*) from rmb where sid = @n1 
  22.  select @c2= count(*) from rmb where sid = @n2 
  23. --开启事务
  24. begin transaction _move 
  25. --判断数据是否异常
  26. if(@c1=0 or @c2=0)
  27.  
  28. print('账号错误')
  29. --回滚事务
  30. rollback transaction _move 
  31. end
  32. else
  33. begin
  34. update rmb set money = money + 100 where sid = @n1 
  35. update rmb set money = money - 100 where sid = @n2
  36. --数据正确过后提交事务
  37. Commit Transaction _move
  38. print('转账成功')
  39. end
  40. end
  41. --调用存储过程
  42. execute Moneys;


评价

如何修改重置MD5加密后的sql用户密码

二次开发时,要加一个忘记密码的功能,后台写了修改密码的方法,数据库执行也修改成功,但是登录一直提示密码错误。之所以...

sql Server的几种分页方式和效率

--topnotin方式 selecttop条数*fromtablename whereIdnotin(selecttop条数*页数Idfromtablename) --ROW_NUMBER()O...

Mysql主从复制+读写分离

使用Mysql读写分离和主从复制的原因:*单台MySQL服务器的安全性,高可用性,高并发都是不满足实际的生产需要。介绍:1.MySQ...

sql Server 中使用游标

--声明一个游标 DECLAREMyCursorCURSOR FORSELECTTOP5FBookName,FBookCodingFROMTBookInfo//定义一个叫MyCursor的游标,...

Mysql控制台插入中文数据报错1366解决

计算机配置: windows系统.数据库:MySQL5.5.如图 : 下图为表结构信息:通过 show full columns from userinfo;查询所得 na...

sqlserver order by

order by 字段名order by 第几个字段(整形)order by 排序:order by 字段名:通过字段名指定的字段排序 order by 字段数...

sqlserver保障远程连接的安全性

如果是只读的话建个视图,建个普通用户只对该视图进行读。读写的话就只能自己在加一层代理服务,由代理来进行读写,各客户...

sqlerver添加用户与授权

添加用户安全性-->登录名,然后右键新建登录名就可以了然后填写好相关信息就可以了右键属性,用户映射可以选择该用户可...

Mysql 游标创建

游标:可以来存储一个结果集,可以通过遍历来访问到每一个数据需求:分表数据。 把一张表的数据根据需求分离,创建不同的表...

没有为 sql 缓存通知启用数据库

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql -S 数据库IP -U 登录名 -P 密码 -d 数据库名称 -t 表名 -et

sqlserver约束

添加表后操作约束--删除约束 altertableaj_testdropconstraintCK__aj_test__userAge__5EBF139D --为表aj_test添加默认...

c sql简单参数化写法

防止sql 注入的,简单参数化写法publicboolLogin(string_username,string_password) { using(SqlConnectionconn=newSqlCo...

mysql 存储过程报错:delimiter

最近刚学sql,学到了存储过程,每当练习的时候就一直出现问题。 现在记录CREATEPROCEDUREproc_out(OUTstuidINT) begin se...

Mysql 视图的(增删改 查)

要显示视图的定义,需要在SHOWCREATEVIEW子句之后指定视图的名称, 我们先来创建几张表,完事后在进行演示:--用户信息表...

sqlServer存储过程拼接sql语句,分页

在写有些存储过程的时候需要进行sql的拼接,然后在使用exec函数执行sql语句注意字符串的拼接,看下面一段存储过程的sql语句...