ACID及事务隔离级别

2)ACID及事务隔离级别

ACID四大特性解释

  • 原子性(Atomicity):一个事务内的操作,要么全部成功,要么全部失败。
  • 一致性(Consistency):数据库从一个一致性状态,转移到另一个一致性状态。
  • 隔离性(Isolation):多个并发事务之间是隔离的。
  • 持久性(Durability):数据一旦提交,改变是永久的。

ACID靠什么保证

  • 原子性由undo log日志保证, 他记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql;
  • 一致性由其他的三大特性来保证;
  • 隔离性由MVCC来保证;
  • 持久性由redo log保证。重做日志缓冲(redo log buffer)和重做日志(redo log)组成,前者在内存中,后者在磁盘中。redo log 用来记录已成功提交事务的修改信息,并且把redo log持久化到磁盘

事务

(1)事务:

是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败。

(2)事务的控制:

MySQL中的事务默认自动提交,我们可以改成手动

sql 复制代码
-- 查看事务的提交方式
select @@autocommit;
set @@autocommit = 0; # 设置0为取消自动提交,1为开启自动提交
-- 开启事务
begin; | start transaction;
-- 提交事务
commit;
-- 回滚事务
rollback;

(3)事务的隔离级别

隔离级别 脏读 丢失修改 不可重复读 幻读
Read Uncommitted 读未提交 可以出现 可以出现 可以出现 可以出现
Read committed 读已提交(Oracle 默认) 不能出现 可以出现 可以出现 可以出现
Repeatable Read 可重复读(mysql 默认) 不能出现 不能出现 不能出现 可以出现
Serializable 可串行化 不能出现 不能出现 不能出现 不能出现

解释:从上到下安全性由低到高,性能由高到低

sql 复制代码
-- 查看事务的隔离级别
select @@transaction_isolation
-- 设置事务隔离级别 session是当前的会话,global是全局
set [session|global] transaction isolation level {隔离级别} 
相关推荐
吃糖的小孩9 小时前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
笃行3501 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3501 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行3501 天前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库
SelectDB2 天前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
这个DBA有点耶2 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵2 天前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
Nturmoils2 天前
WHERE 条件别凭习惯写,常用查询先跑一遍
数据库
Databend3 天前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent