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