SQL(5)- 事务

1:事务简介

2:事务操作

3:事务四大特性

4:并发事务问题

5:事务隔离级别

一:事务简介

比如:转账,转账分为三个步骤(查询账户余额,xx账户余额-1000,xx账户余额+1000),而这三个步骤看成一个事务;

1:当执行完增删改之后,SQL事务默认自动提交;

sql 复制代码
use mydb2

create table account(
  id int auto_increment primary key comment '主键ID',
  name varchar(10) comment '姓名',
  money int comment '余额'
)comment '账户表'

show account
insert into account (id,name,money) values(null,'张三',2000),(null,'王五',2000)

--转账操作(张三给王五转1000)
--正常操作
--1:查询张三余额

select * from account where name = '张三'

--2:将张三账户余额-1000
update account set money = money - 1000 where name = '张三'

程序抛出异常

--3:将王五账户余额+1000
update account set money = money +1000 where name = '王五'

---异常操作(在2下面加层序抛异常)
---目前针对上面的SQL,相当于每一条SQL都是一个事务;所以要控制事务

二:事务操作

1:SQL默认自动提交事务;但是异常情况下,需要手动提交更保险

2:需要手动事务操作

1:select @@autocommit = 1 ; 表示事务自动提交

2:改为手动提交

set @@autocommit = 0

sql 复制代码
create table bank(
  id int auto_increment primary key comment '主键ID',
  name varchar(10) comment '姓名',
  money int comment '余额'
)comment '余额表'

show account
insert into bank (id,name,money) values(null,'张三',2000),(null,'王五',2000)


--查看事务是否是自动提交(1)
select @@autocommit 

--设置为手动事务提交
set @@autocommit = 0

--转账操作(张三给王五转1000)
--正常操作
--1:查询张三余额

select * from bank where name = '张三'

--2:将张三账户余额-1000
update bank set money = money - 1000 where name = '张三'


--3:将王五账户余额+1000
update bank set money = money +1000 where name = '王五'

--4:提交事务
commit 

--5:当执行出错时,需要回滚
rollback

方法二:

sql 复制代码
-- 方法二:
set @@autocommit = 1

--1:开启事务(手动提交事务)
start transaction 

--1:查询张三余额
select * from bank where name = '张三'

--2:将张三账户余额-1000
update bank set money = money - 1000 where name = '张三'

程序执行报错...

--3:将王五账户余额+1000
update bank set money = money +1000 where name = '王五'


--回滚(当前事务已经结束)
rollback 
相关推荐
m0_748554814 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
lee_curry4 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
早日退休!!!5 小时前
《数据结构选型指南》笔记
数据结构·数据库·oracle
xcLeigh5 小时前
KES数据库性能优化实战
数据库·sql·性能优化·sql优化·数据性能
阿正呀5 小时前
Redis怎样实现本地缓存的高效失效通知
jvm·数据库·python
yoyo_zzm5 小时前
Laravel9.x新特性全解析
数据库·mysql·nginx
九转成圣5 小时前
Java 性能优化实战:如何将海量扁平数据高效转化为类目字典树?
java·开发语言·json
2501_901200535 小时前
mysql如何设置InnoDB引擎参数_优化innodb_buffer_pool
jvm·数据库·python
直奔標竿6 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring
金銀銅鐵6 小时前
[java] 编译之后的记录类(Record Classes)长什么样子(上)
java·jvm·后端