数据库之事务

1.事务的定义

事务就是一组数据库操作序列(包含一个或多个SQL操作命令),事务会把所有操作看作是一个不可分割的整体向数据库系统提交或者撤销操作,所有操作要么都执行,要么都不执行。

2. 事务的ACID特性

原子性

一致性

隔离性

持久性

原子性:事务管理的基础,把事务中的所有操作看作是一个不可分割的工作单元,要么都执行,要么都不执行。

一致性:事务管理的目的,保证事务开始前和事务结束后数据的完整性和一致性。

隔离性:事务管理的目的,使多个事务并发操作同一个表数据时,每个事务都有各自独立的数据空间,事务的执行不会受到其他事务的干扰,可通过设置隔离级别解决不同的一致性问题。

持久性:事务管理的结果,当事务被提交以后,事务中的命令操作修改的结果会被持久保存,且不会被回滚。

3. 隔离级别的种类

未提交读 read uncommitted 允许脏读,不可重复读 幻读

提交读 read committed 不允许脏读 ,允许不可重复读 幻读

可重复读 repeatable read 不允许脏读 不可重复读 有条件的允许 幻读(innoDB存储引擎可以不允许)

串行读 serializable 都不允许,相当于表级锁定,但是会影响数据库的读写效果和性能。

4. 如何设置隔离级别?

bash 复制代码
设置隔离级别:
set global transaction isolation level 隔离级别名称;     
#全局级别的设置,可在所有会话有效,需要重新登录才可生效
 
set session transaction isolation level 隔离级别名称;    
#会话级别的设置,在当前会话会话中立即生效
 
 
设置全局事务隔离级别:
set global transaction isolation level read committed; ##永久生效
set @@global.tx_isolation='read-committed';   #重启服务后失效
 
设置会话事务隔离级别:
set session transaction isolation level repeatable read;
set @@session.tx_isolation='repeatable-read';  #重启服务后失效

查询隔离级别

like表示模糊查询 百分号相当于通配符*的作用

bash 复制代码
查询全局事务隔离级别:
show global variables like '%isolation%';
 
查询会话事务隔离级别:
show session variables like '%isolation%';

5.事务管理操作命令

bash 复制代码
begin;             #开启一个事务
....        create database/table    insert into    update XXX set   delete from      #事务性操作
savepoint XX;      #在事务中创建回滚点
rollback to XX;    #在事务中回滚操作到指定的回滚点位置
commit; 或 rollback;    #提交或回滚结束事务
相关推荐
代码的小搬运工2 小时前
网络请求(NSURL、NSURLRequest、NSURLSessionDataTask、协议回调与 JSON 数据的基本流向)
网络·数据库·json
Cx330❀8 小时前
【MySQL基础】一文吃透“表的约束”:从 Null/Default 到主外键的终极安全法则
linux·服务器·数据库·c++·mysql·安全
c238568 小时前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
我科绝伦(Huanhuan Zhou)8 小时前
MySQL极端场景数据丢失防护:从Crash-Safe到异地备份
数据库·mysql
辞旧 lekkk8 小时前
【Redis初阶】常见数据类型
开发语言·数据库·c++·redis·学习·缓存·bootstrap
明志数科9 小时前
人形机器人格斗场景下的技术挑战:动力学控制、感知融合与实时决策
网络·数据库
酉鬼女又兒9 小时前
零基础入门 DeepSeek V4 Pro API 开发:从环境搭建、消息格式规范到翻译函数实战、少样本提示、多轮对话聊天机器人与常见报错全流程详解指南
大数据·网络·数据库·人工智能·macos·机器人·github
笨蛋不要掉眼泪9 小时前
MySQL架构揭秘:MVCC解决读一致性问题
数据库·mysql·架构
Navicat中国9 小时前
开发者入门:无服务器数据库
数据库·云原生·serverless·navicat
whn197711 小时前
如何避免以root用户执行达梦
数据库