mysql之事务 | 事务的四大特性
事务 📖
事务四大特性(ACID):
A: 原子性
每个事务都是不可分割的最小单位(同一个事物内的多个操作要么同时成功要么同时失败)
C: 一致性
执行完事务之后数据库的数据状态(从一个状态变为另一个状态)
I: 隔离性
事务与事务之间彼此不干扰
D: 持久性
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
实际案例比喻什么是事务:
我们来看一个现象:
准备三个身份:
小明
ATM机
小强
小明用建行的卡通过农行的ATM机给工行小强转1000元,
那么建行就会给小明的卡减1000元
共行就会给小强的卡增加1000元。(其实你的钱就是一个sql语句)
那么这时候会不会产生这样一个现象:在转钱的过程中工行的系统出现了问题,小明的卡明明已经减了1000元,但是小强的卡因工行系统问题并没有增加那1000元。
这种情况在之前是常有发生的。
那么这个时候怎么解决这个问题呢?
这里发明了事务:同时改变状态,要么同时成功要么同时失败。(我不增加钱对方就不会减钱,对方减了钱数那我肯定增加钱)
补充:
# 开启事务:(下面的所有操作都包含在一个事务里边:下面的操作要么同时成功要么同时失败 可以回退)
start transaction;
# 如何回滚:
rollback;
# 如何确认:
commit;
实例:
# 模拟消费
create table user(
id int primary key auto_increment,
name char(32),
balance int # 存款
);
insert into user(name,balance) values ('gary',1000),('jack',1000),('tom',1000);
start transaction; # 开启事务
# 修改操作
update user set balance=900 where name='gary'; # 支付100元
update user set balance=1010 where name='jack'; # 中介拿走10元
update user set balance=1090 where name='tom'; # 收款方收到90
但是在事务里边这个数据还没有到硬盘中,还没有保存。
现在这个状态还可以回退(我反悔了我不买了)
回滚操作:rollback;
确认数据:确认支付成功不反悔了
commit;
结论:在事务下面的操作 要么同时成功要么同时失败可以回退,事务在提交后是在内存中,没有刷新到硬盘必须执行commit;确认才会刷新到硬盘 整个事务结束。
使用python代码来完善事务实现伪代码逻辑:
try: # 判断异常
update user set balance=900 where name='gary'; # 支付100元
update user set balance=1010 where name='jack'; # 中介拿走10元
update user set balance=1090 where name='tom'; # 收款方收到90
except 异常: # 如果有异常就回滚
rollback;
else: # 无异常则保存解释事务
commit;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)