用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
Oracle
›
MySQL——事务
MySQL——事务
天空闲话
论坛元老
|
2024-12-15 12:13:31
|
显示全部楼层
|
阅读模式
楼主
主题
1737
|
帖子
1737
|
积分
5211
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
一.事务的概念
事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定差别的客户端看到的数据是不雷同的。
一个完备的事务,绝对不是简单的 sql 聚集,还必要满意如下四个属性:
原子性:
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在实验过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有实验过一样。
一致性:
在事务开始之前和事务结束以后,数据库的完备性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包罗资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:
数据库允很多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发实验时由于交织实验而导致数据的不一致。事务隔离分为差别级别,包括读未提交( Read uncommitted )、读提交( read committed )、可重复读( repeatable read )和串行化( Serializable )
长期性:
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
上面四个属性,可以简称为 ACID 。
事务被 MySQL 编写者设计出来,本质是为了当应用步伐访问数据库的时候,
事务能够简化我们的编程模型
, 不必要我们去考虑各种各样的埋伏错误和并发题目
。
因此事务本质上是为了应用层服
务的
,而不是陪同着数据库系统天生就有的。
二.事务提交方式
事务的提交方式常见的有两种:
自动提交
手动提交
检察事务提交方式
show variables like 'autocommit';
改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0; // 禁止自动提交
SET AUTOCOMMIT=1; // 开启自动提交
三.事务常见操作
1.事务的开始和回滚
测试
用事务处理表操作
:
start transaction;--开启一个事务,也可以使用 begin ,推荐使用 begin
savepoint save1;--创建一个保存点 save1
xxxxxxx;--进行一系列表操作
savepoint save2;--创建一个保存点 save2
xxxxxxx;--进行一系列表操作
至此,我们创建了两个保存点,并且在保存点之后,进行了多少表操作。
rollback to save2;--回滚到保存点2
rollback;--回滚到最开始
当回滚到某个保存点时,
该保存点之后的表操作将消失
,表的内容回归到该保存点被创建时的状态;如果直接回滚到最开始,那么
所有的表操作都将消失
,表也将回归到事务开始时的样子。
回滚之后仍可继续进行事务操作。
commit;--提交事务
在事务运行期间,可以随时进行回滚操作,
如果事务被提交,就不能再进行回滚操作,同时势务也将被关闭
。
别的,如果在事务开启时,此时MySQL客户端
异常退出
,
如果没有进行commit提交,将会发生自动回滚,事务开启后的所有操作荡然无存
;
如果提进步行的commit提交,由于数据已经插入数据库,以是数据将会被保留
。
在之前我们对数据库做各种操作时,都
没有使用过 begin 或者 start transaction 开启事务
,但事实上我们所用的
每一条 SQL 语言都默认被封装成事务
,它们会
根据 autocommit 的设定
,
如果是自动提交,则实验后数据库就会立马发生变化,如果设置的是手动提交,则必须通过 commit 提交,数据库才会发生变化
。
但是如果是使用 begin或者start transaction 启动的事务,事务便必须要通过 commit 提交,才会长期化,与是否设置set autocommit无关。
从上面的例子,我们能看到事务自己的原子性(回滚),长期性(commit)。
四.事务隔离
1.隔离概念
MySQL服务大概会同时被多个客户端进程(线程)访问,访问的方式以事务方式进行。
一个事务大概由多条SQL构成,也就意味着,任何一个事务,都有实验前,实验中,实验后的阶 段。所有事务都要有个实验过程,那么在多个事务各自实验多个SQL的时候,就还是有大概会出现互相影响的环境。好比:多个事务同时访问同一张表,甚至同一行数据。
数据库中,为了保证事务实验过程中只管不受干扰,就有了一个告急特征:隔离性。
数据库中,允许事务受差别程度的干扰,就有了一种告急特征:隔离级别。
隔离级别:
读未提交【
Read Uncommitted
】
: 在该隔离级别,
所有的事务都可以看到其他事务没有提交的实验效果
。(实际生产中不大概使用这种隔离级别的),相当于没有任何隔离性。
读提交【
Read Committed
】
:该隔离级别是大多数数据库的默认的隔离级别(不是 MySQL 默认的)。它满意了隔离的简单界说:
一个事务只能看到其他的已经提交的事务所做的改变
。
可重复读【
Repeatable Read
】
: 这是 MySQL 默认的隔离级别,它确保
同一个事务,在实验中,多次读取操作数据时,会看到同样的数据行
。但是会有幻读题目。
串行化【
Serializable
】
: 这是事务的最高隔离级别,它通过
强制事务排序,使之不大概相互冲突, 从而解决了幻读的题目
。它在每个读的数据行上面加上共享锁,但是大概会导致超时和锁竞争 (这种隔离级别太极端,实际生产基本不使用)。
事务并发大概引发的题目
:
一个事务在实验中,读到另一个实验中事务的更新(或其他操作)但是未commit的数据,这种征象叫做
脏读
。
同一个事务内,同样的读取,在差别的时间段 (依旧还在事务操作中!),读取到了差别的值(其他事务对读取的数据改动并 commit 了),这种征象叫做
不可重复读。
数据库在可重复读环境的时候,无法屏蔽其他事务insert的数据,会造成虽然大部门内容是可重复读的,但是insert的数据在可重复读环境被读取出来,导致多次查找时,会多查找出来新的记录,就如同产生了幻觉。这种征象,叫做
幻读
。
2.隔离性操作
检察隔离性:
SELECT @@global.tx_isolation;
--检察全局隔离级别
SELECT @@session.tx_isolation;
--检察会话(当前)全局隔离级别
SELECT @@tx_isolation;
--检察会话(当前)全局隔离级别
设置隔离性:
-- 设置当前会话 or 全局隔离级别语法
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READCOMMITTED | REPEATABLE READ | SERIALIZABLE}
五.事务一致
事务实验的效果,必须
使数据库从一个一致性状态,变到另一个一致性状态
。当数据库只包罗事务 成功提交的效果时,数据库处于一致性状态。如果系统运行发生停止,某个事务尚未完成而被迫中 断,而该未完成的事务对数据库所做的修改已被写入数据库,此时数据库就处于一种不精确(不一 致)的状态。因此
一致性是通过原子性来保证的
。
一致性和用户的业务逻辑强相关,一般MySQL提供技术支持,但是一致性还是要用户业务逻辑做支持,也就是一致性是由用户决定的。
在技术上,
事务的原子性、隔离性和长期性保证了事务的一致性
。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
天空闲话
论坛元老
这个人很懒什么都没写!
楼主热帖
css过渡样式
Mysql终端Terminal操作
编程能力提升系列:1. 二维矩阵的最大 ...
【数据库】数据库课程设计一一疫苗接种 ...
C语言执行过程
罗景:连接效率优化实践
Java EnumMap values()方法具有什么功 ...
Kubernetes(K8S) Controller - Statefu ...
Cesium 案例(一) Z-Indexing Geometr ...
如何精简 Prometheus 的指标和存储占用 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
MES
虚拟化与私有云
快速回复
返回顶部
返回列表