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 
相关推荐
许彰午12 分钟前
17_synchronized关键字深度解析
java·开发语言
闪电悠米1 小时前
黑马点评-Redis 消息队列-03_stream_consumer_group
开发语言·数据库·redis·分布式·缓存·junit·lua
DIY源码阁1 小时前
JavaSwing航班订票管理系统 - MySQL版
数据库·mysql
Xzh04232 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
艾利克斯冰2 小时前
Java 设计模式-行为型模式(更新中)
java·开发语言·设计模式
倒霉蛋小马2 小时前
Java新特性:record关键字
java·开发语言
浪客灿心3 小时前
项目篇:模块设计与实现
数据库·c++
折哥的程序人生 · 物流技术专研3 小时前
《Java 100 天进阶之路》第95篇:消息队列基础(RocketMQ/Kafka)(2026版)
java·面试·kafka·rocketmq·java-rocketmq·求职招聘
budingxiaomoli3 小时前
Spring日志
java·开发语言
IT空门:门主3 小时前
Spring 注入三剑客:@Resource、@Autowired、@RequiredArgsConstructor 到底该用哪个?
java·后端·spring