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 
相关推荐
oradh15 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
莫逸风15 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
z1234567898616 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD16 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
yaoxin52112316 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
做个文艺程序员17 小时前
Linux第24篇:Java应用监控体系搭建:Prometheus+Grafana可视化运维
java·grafana·prometheus
TlSfoward17 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记17 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发17 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
小钻风336617 小时前
Spring Boot 文件上传详解:深入理解 MultipartFile 的使用与原理
java·开发语言