事务
事务
1、保证数据一致性,由一组相关 DML 语句组成,要么全成功,要么全失败
2、执行事务操作时,MySQL 会在表上加锁,防止其他用户修改表的数据
3、基本操作
(1)开始一个事务
START TRANSACTION;
或
BEGIN;
或
SET autocommit=off;
(2)设置保存点
SAVEPOINT 保存点名;
(3)回退事务
ROLLBACK TO 保存点名;
(4)回退所有事务
ROLLBACK;
(5)提交事务
COMMIT;
4、事项
(1)不开始事务,默认 DML 语句自动提交事务
(2)InnoDB 引擎支持 MySQL 事务机制,MyISAM 不支持
(3)执行 COMMIT 后,确认事物变化,结束事务、删除保存点、释放锁、数据生效
(4)COMMIT 结束事务生效后,其他会话(其他连接)可以查看事务变化后的新数据,即所有数据正式生效
5、事务 ACID 特性
(1)原子性:Atomicity,事务中的操作要么全部生效,要么全部失效
(2)一致性:Consistency,事务必须使数据库从一个一致性状态,变换到另一个一致性状态
(3)隔离性:Isolation,多并发事务之间隔离
(4)持久性:Durability,事务一旦提交,改变是永久性的
事务隔离
1、多个连接开启各自事务操作数据库,系统负责隔离,保证各个连接在获取数据时的准确性
2、不隔离的问题
(1)脏写:A 事务修改 B 事务未提交的修改
(2)脏读:A 事务读取 B 事务未提交的修改
(3)不可重复读:A 事务读取两次数据的过程中,B 事务修改数据,导致 A 读取的数据前后不一
(4)幻读:A 事务读取两次数据的过程中,B 事务添加 / 删除数据,导致 A 读取的数据前后不一
3、事务隔离级别:定义事务之间的隔离程度
MySQL 事务隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
读未提交:READ UNCOMMITTED | 可能出现 | 可能出现 | 可能出现 | 不加锁 |
读已提交:READ COMMITTED | 不会出现 | 可能出现 | 可能出现 | 不加锁 |
可重复读:REPEATABLE READ | 不会出现 | 不会出现 | 可能出现 | 不加锁 |
可串行化:SERIALIZABLE | 不会出现 | 不会出现 | 不会出现 | 加锁 |
(1)默认 REPEATABLE READ,满足大部分需求
4、相关操作
(1)查看当前会话隔离级别
SELECT @@tx_isolation;
(2)查看系统当前隔离级别
SELECT @@global.tx_isolation;
(3)设置当前会话隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;
(4)设置系统当前隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别;
5、全局修改
(1)修改 my.ini 配置文件,设置默认的事务隔离级别
transaction-isolation = READ-UNCOMMITTED
transaction-isolation = READ-COMMITTED
transaction-isolation = REPEATABLE-READ
transaction-isolation = SERIALIZABLE
(2)需要重启 MySQL 服务才会生效
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战