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 
相关推荐
BlockChain88818 小时前
SpringBoot实战一:10分钟搭建企业级用户管理系统(20000字完整项目)
java·spring boot·后端
消失的旧时光-194318 小时前
第六课 · 6.1 从 JDBC 到 MyBatis:SQL 工程化是如何发生的?
java·sql·mybatis
Jaxson Lin18 小时前
Java编程进阶:线程基础与实现方式全解析
java·开发语言
夜喵YM18 小时前
基于 Spire.XLS.Free for Java 实现无水印 Excel 转 PDF
java·pdf·excel
人道领域18 小时前
javaWeb从入门到进阶(MYSQL)
数据库·mysql·oracle
茶本无香18 小时前
设计模式之五—门面模式:简化复杂系统的统一接口
java·设计模式
liux352818 小时前
MySQL读写分离全面解析:ProxySQL配置指南(十)
数据库·mysql
她说可以呀18 小时前
网络基础初识
java·网络·java-ee
人工干智能18 小时前
LlamaIndex:使用向量数据库进行检索,loaded_query_engine.query(“..........?“)
数据库·llm
没有bug.的程序员18 小时前
Java锁优化:从synchronized到CAS的演进与实战选择
java·开发语言·多线程·并发·cas·synchronized·