MySQL-事务

一.事务的概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。

二.为什么需要事务

准备测试表:

sql 复制代码
drop table if exists accout;
create table accout(
 id int primary key auto_increment,
 name varchar(20) comment '账户名称',
 money decimal(11,2) comment '金额'
);
insert into accout(name, money) values
('阿里巴巴', 5000),
('四十大盗', 1000);

比如说,四十大盗把从阿里巴巴的账户上偷盗了2000元

sql 复制代码
-- 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';

假如在执行以上第一句SQL时,出现网络错误,或是数据库挂掉了,阿里巴巴的账户会减少2000,但是四十大盗的账户上就没有了增加的金额。解决方案:使用事务来控制,保证以上两句SQL要么全部执行成功,要么全部执行失败。

在操作数据库中的数据时引入事务,来保证这一系列操作(将一些列SQL语句打包成一个整体)的原子性(表示不可拆分的情况)。

这些操作要么都执行要么都不执行,此时这个都不执行是一个伪概念,并不是真的一个都不执行,而是先执行如果碰到错误的操作,然后触发回滚操作,然后将数据库恢复。

回滚操作,就是在事务执行的过程中,记录事务中的关键操作,用来作为事务执行失败时回滚的依据。这些关键操作是保存在文件中的,即使在事务执行失败时主机掉电,也是不影响的(因为在失败之前回滚所需要的文件就已经生成了),当主机恢复会优先执行回滚操作,保持数据库中数据的正确性。

三.事务的特点

1.原子性

通过回滚的方式实现的,保证了一系列操作都可以正确的执行,如果失败了也可以恢复如初

2.一致性

事务在执行前后的数据都要保持正确

3.永久性

事务的操作是永久的生效的

4.隔离性 (在数据库并发的处理多个事务时需要考虑的特性)

数据库为什么需要并发的处理事务:

因为数据库是一个客户端服务器结构的软件,所以在同一时间就有可能接收到多个事务处理,如果此时在保持串行,那么数据库的效率会大打折扣,所以此时引入多台主机,来并发的执行事务,就可以提高数据库服务器的执行效率。

数据库并发执行多个事务的时候,涉及到的问题:

四.事务的操作

1.开启事务

start transaction;

2.事务结束

commit;

3.rollback

主动出发事务的回滚(一般是在其他语言中,搭配条件判断来实现的)。

相关推荐
YOU OU5 小时前
Redis基础常识与命令
数据库·redis·缓存
Database_Cool_7 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
爱写代码的阿森8 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_8 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白9 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面9 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧9 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈9 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy9 小时前
log4net 数据库存日志正确配置
数据库