数据库事务原子性、一致性是怎样实现的?

DFT ATPG提升coverage的方法 采用更精确的故障模型,如桥接故障模型(用于描述电路中不应连接的节点之间的短路故障)和路径延迟故障模型(考虑信号在电路路径上的传输延迟),可以使ATPG工具生成更有效的测试向量来覆盖这些特殊故障。假设电路中有一个与门的输入引脚存在固定为0的故障(stuck - at - 0),D - 算法会分析与门的其他输入以及与门输出连接的后续电路逻辑,从而确定整个电路的输入值,使得当该故障存在时,电路的输出与无故障时不同。通过增加测试向量的类型,如功能测试向量和结构测试向量的结合,可以提高故障覆盖率。 阅读详情

转自知乎,原文链接:https://www.zhihu.com/question/30272728/answer/71927112


讨论数据库的事务原子性,先看最极端的情况,即全局一把锁,所有事务排队执行,这种情况下没有原子性问题,因为所有事务看到的都是在自己之前已经提交的数据。


为了提高性能,充分利用多核,我们需要让多个事务能够并行的执行,但是还要保证这些事务“看起来”是串行执行的(external consistency)。这里需要考虑事务的三种关系,即读与读的关系,写与写的关系,读与写的关系。


读事务与读事务的关系最简单,因为不对数据进行修改,因此读与读之间可以直接并行
写事务与写事务的关系,对同一条记录的修改,需要保证串行,不能出现lost update的情况,一般通过行锁(oracle/mysql/oceanbase),或者事先通过SQL分析将可能冲突的事务排队后执行(calvin/oceanbase)
读事务与写事务的关系,这个最复杂,因为数据库操作中,几乎没有只写的情况,一般都是“read-modify-write”,比如最简单的update ... where 还有 update set c=c+1 whete,绝大部分写事务都是在读取一些数据之后,再修改数据,我们称这类事务为“读写事务”。因此读与写关系,会涉及两类关系:
只读事务与读写事务的关系,一般使用多版本的方式保存数据,每个事务分配一个全局唯一且递增的“事务版本号”,更新数据时将事务版本号也保存在数据中。在全局维护一个“最大已提交的”版本号(committed version),一般就是一个64或128位的整数,每个只读事务开始时,原子的读取这个commited version,读取数据时,只读取版本号小于等于它的内容。多版本的实现方式各家不尽相同;数据存储方面oracle与innodb都是使用data block + undo block的方式,历史版本保存在undo block中,oceanbase内存引擎则简单的将一行所有的修改历史串成反向链表;对于事务版本号,oracle与oceanbase都在事务提交时生成版本号,可以保证版本号的大小严格遵守事务提交顺序,但是需要在事务提交时(oceanbase)或提交后(oracle)将事务版本号回填到数据内容中,mysql则简单的在事务开启时生成版本号,因此读取逻辑相对复杂,需要过滤掉开始事务时尚未结束事务对数据的修改。
读写事务之间的关系,这里需要考虑的是一个读写事务T1在执行过程中,它刚刚读过的数据被其他事务修改的情况,这种情况下T1需要回滚重做(单语句事务)或报告事务冲突(交互型事务),一般的做法是在T1提交时对涉及到的行加锁后检查版本号或内容,在read committed隔离级别下这个特性并非标准所要求,但是oracle/mysql/oceanbase都在语句级别实现了,也成为了事实标准,按oracle的叫法叫做transaction set consistency

温度PID控制PLC程序 温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值 立即下载

相关推荐

Python实战:超分辨率图像质量评估全攻略——PSNR、SSIM、LPIPS与NIQE的代码实现与优化

本文详细介绍了在Python中实现超分辨率图像质量评估的完整方案,涵盖PSNR、SSIM、LPIPS和NIQE四大核心指标。通过模块化代码设计、多进程并行处理和GPU加速优化,帮助开发者构建高效、可扩展的评估系统,并提供了实战避坑指南与结果解读方法。

weixin_29053073的博客 477

[mysql]mysql的原子性是怎么实现的?(undolog的实现原理)

前言 没看看redolog和undolog的实现,还真不敢说这个原子性是怎么实现的。 看完觉得主要分为两方面吧。 [mysql]innodb的redolog 1. 从redolog的角度 规定在执行这些需要保证原子性的操作时必须以组的形式来记录的redo日志,在进行系统崩溃重启恢复时,针对某个组中的redo日志,要么把全部的日志都恢复掉,要么一条也不恢复。 ...

新一的技术笔记 4229

单细胞专题(1) | 单细胞转录组研究样本准备指南(上)

单细胞RNA测序(scRNA-seq)是目前最前沿,能进行大规模实验的转录组研究技术,为理解细胞组成和动态生物学过程提供了很多新的见解。单细胞研究已经为我们理解发育过程,老化和疾病(如癌症)等提供了大量数据。在这里,小编主要就前期的样本准备与保存需注意问题给大家进行讲解,以备大家在不同的研究场景和研究背景下,走好单细胞转录组学研究的第一步。

bioyigene的博客 4232

【数据库】数据库如何保证原子性

写在最前,本人也只是个大三的学生,如果你发现任何我写的不对的,请在评论中指出。 今天网上冲浪的时候,看到有人发了面试题,问的是数据库如何保证原子性的,都知道事务里原子性的意思:一个事务包含多个操作,这些操作要么全部执行,要么全部不执行。但现在问是如何保证的,那就是我的知识盲区了,看到群里大佬们争先恐后的漂亮回答,原来只有我一个人菜得真实嘛? 后面我又去百度搜搜抄抄,总结了下面的知识点: binlong 什么是binlog? 先说说这家伙,binlong就是记录了数据库结构和表数据变更, 就是对进行.

qq_43654226的博客 4619

DySAT+: Enhancing Dynamic Graph Representation Learning with Multi-Head Self-Attention and Temporal-

本文深入探讨了DySAT+模型在动态图表示学习中的创新应用,通过多头时空注意力机制和层级信息融合策略,有效解决了动态图数据中的时间维度信息捕捉和结构演变动态适应问题。该模型在社交网络异常检测和金融交易网络分析等场景中表现出色,显著提升了预测准确率和响应速度。

weixin_29035405的博客 337

探索Vortex开源GPGPU:RISC-V SIMT架构(4-1),Execute SFU(1)

本文详细分析了Vortex RISC-V内核6级流水线中Execute阶段的SFU(特殊功能单元)模块。重点介绍了SFU的数据流结构,包含dispatch_unit、pe_switch、csr_unit、wctl_unit和gather_unit五个子模块。文章深入解析了warp控制指令wspawn和tmc的实现机制:wspawn用于激活指定数量的warp并设置新PC值,tmc则用于控制线程掩码和warp状态。通过C代码和汇编指令的对照分析,阐明了这些指令在并行计算中的关键作用,包括线程激活、状态切换和执行

weixin_55313207的博客 1364

MySQL原理(五)数据库中的事务

在计算机术语中,事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务是恢复和并发控制的基本单位。

w_t_y_y的博客 1075

Python之ae-toolbox包语法、参数和实际应用案例

ae-toolbox(全称 after-effects-toolbox)是 Python 生态中专门用于 Adobe After Effects(AE)自动化操作 的工具包,基于 AE 的 ExtendScript(JSX)桥接技术,实现 Python 与 AE 的跨语言通信。

王国平的博客 1174

数据库事务:确保数据一致性的关键机制

原子性保证事务是一个不可分割的工作单元,其中的操作要么全部完成,要么全部不执行。如果事务中的任何部分失败,则整个事务将被撤销。一致性确保事务必须使数据库从一个一致状态转换到另一个一致状态。事务执行前后,数据库的完整性约束没有被破坏。多个事务并发执行时,一个事务的执行不应影响其他事务的执行。每个事务都应在独立的环境中运行,就像它是唯一正在运行的事务一样。持久性确保一旦事务提交,它对数据库所做的更改将是永久性的,即使系统发生故障也不会丢失。事务可以读取其他事务未提交的数据。事务只能读取其他事务已经提交的数据。

kersixy的博客 1160

(王道408考研数据结构)第一章绪论-第二节1:算法的基本概念、算法的特性及设计要求

算法(Algorithm):是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作王道视频课中讲到了一个例子,展示了算法就是解决问题的特定步骤的描述对于给定的问题可以有多种多样的算法来解决,只不过这些算法有各自的优点和缺点。

快乐江湖的博客 2686

Qt Bridge for Figma

《QtBridge for Figma设计开发协作工具详解》摘要(149字) QtBridge for Figma是连接Figma设计工具与Qt框架的官方插件,实现UI设计到QML代码的自动化转换。核心功能包括:自动生成QML代码、设计系统变量提取、资源文件导出,支持双向同步和组件映射。工作流程涵盖设计标注、配置导出和代码生成三阶段,提供设计令牌、响应式布局等高级特性。该工具支持Qt5.15+/6.0+版本,通过标准化协作流程显著提升设计开发效率,确保视觉与代码一致性,适用于中英文项目开发。

追赶时代的博客 522

mysql原子性通过什么实现_数据库事务原子性、一致性是怎样实现的?[转]

这个问题的有趣之处,不在于问题本身(“原子性、一致性的实现机制是什么”),而在于回答者的分歧反映出来的另外一个问题:原子性和一致性之间的关系是什么?我特别关注了@我练功发自真心 的答案,他正确地指出了,为了保证事务操作的原子性,必须实现基于日志的REDO/UNDO机制。但这个答案仍然是不完整的,因为原子性并不能够完全保证一致性。按照我个人的理解,在事务处理的ACID属性中,一致性是最基本的属性,其...

weixin_39789370的博客 720

DRV8311HRRWR直流无刷(BLDC)电机驱动原理图设计

DRV8311HRRWR集成三个MOSFET 半H桥,用于驱动三相无刷直流电机(BLDC),适用于5V、9V、12V或18V直流电源轨或1S至4S电池供电应用。内部集成三个具有集成电流感测功能的电流感测放大器(CSA),可感测BLDC电机的三相电流,从而实现FOC和电流控制系统设计方案。集成保护特性:VM 欠压锁定 (UVLO)、 电荷泵欠压 (CPUV)、过流保护 (OCP)、热警告和热关断 (OTW/OTSD)、故障条件指示引脚 (nFAULT)支持 1.8V、3.3V 和 5V 逻辑输入。

zhusl6688的博客 1229

handler原子锁_数据库事务原子性、一致性是怎样实现的?

这个问题的有趣之处,不在于问题本身(“原子性、一致性的实现机制是什么”),而在于回答者的分歧反映出来的另外一个问题:原子性和一致性之间的关系是什么?我特别关注了@我练功发自真心的答案,他正确地指出了,为了保证事务操作的原子性,必须实现基于日志的REDO/UNDO机制。但这个答案仍然是不完整的,因为原子性并不能够完全保证一致性。按照我个人的理解,在事务处理的ACID属性中,一致性是最基本的属性,其它...

weixin_39816362的博客 261

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据库事务原子性、一致性是怎样实现的?[转]

这个问题的有趣之处,不在于问题本身(“原子性、一致性的实现机制是什么”),而在于回答者的分歧反映出来的另外一个问题:原子性和一致性之间的关系是什么?   我特别关注了@我练功发自真心 的答案,他正确地指出了,为了保证事务操作的原子性,必须实现基于日志的REDO/UNDO机制。但这个答案仍然是不完整的,因为原子性并不能够完全保证一致性。   按照我个人的理解,在事务处理的ACID属性中,一致...

weixin_34082854的博客 613

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

mysql原子性和乐观锁_数据库事务原子性、一致性是怎样实现的?

这个问题的有趣之处,不在于问题本身(“原子性、一致性的实现机制是什么”),而在于回答者的分歧反映出来的另外一个问题:原子性和一致性之间的关系是什么?我特别关注了@我练功发自真心的答案,他正确地指出了,为了保证事务操作的原子性,必须实现基于日志的REDO/UNDO机制。但这个答案仍然是不完整的,因为原子性并不能够完全保证一致性。按照我个人的理解,在事务处理的ACID属性中,一致性是最基本的属性,其它...

weixin_30567751的博客 393

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

mysql 事务原子性_数据库事务原子性、一致性是怎样实现的?

先借用前辈的一句话:数据库事务有不同的隔离级别,不同的隔离级别对锁的使用是不同的,锁的应用最终导致不同事务的隔离级别。隔离性分为四个级别:1读未提交:(Read Uncommitted)2读已提交(Read Committed) 大多数数据库默认的隔离级别3可重复读(Repeatable-Read) mysql数据库所默认的级别4序列化(serializable)四个级别的具体实现和不同的请下面细...

weixin_28681379的博客 448

数据仓库与数据库之间的区别与联系

数据库:主要用于事务处理,即OLTP(On-Line Transaction Processing)【联机事务处理】,也就是我们常用的面向业务的增删改查操作。常用的数据库有Mysql,Oracle,PostgreSQL。 数据仓库:主要用于数据分析,即OLAP(On-Line Analytical Processing)【联机分析处理】,供上层决策,常见于一些查询性的统计数据。常见的数仓有Greenplum,Hive。基于MYISAM存储引擎的MySQL也是可以用来做数据仓库的。

张小鱼的博客 3595

oracle如何实现原子性,数据库事务ACID特性(原子性、一致性、隔离性、持久性),事务的原子性和一致性...

数据库事务ACID特性(原子性、一致性、隔离性、持久性),事务的原子性和一致性ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)原子性:一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,事务要么成功(可见),要么失败(不可见),不存在事务部分成功的情况。对于一...

weixin_35696321的博客 491

如何用 transaction 事务机制确保本地数据读写的原子性

", (1, 2)) conn.execute("COMMIT")except: conn.execute("ROLLBACK") raise2. 纯内存数据(如 dict/list)无法靠数据库事务保护内存结构没有持久化和回滚能力。要模拟原子性,需手动实现状态快照或两阶段提交逻辑:修改前深拷贝原状态(适用于小数据量)所有变更在副本上进行,验证通过后再整体替换原对象配合锁(如 threading.Lock)防止并发读写冲突注意:这不是真正的事务,只是应用层规避策略,崩溃时仍会丢失。

weixin_45858012的博客 240

原子性(Atomicity)和一致性(Consistency)的区别?

是数据库事务ACID特性中的两个核心概念,虽然它们密切相关,但解决的问题和侧重点完全不同。

宋发元 2579

事务:概念,特性( 原子性、一致性、 隔离性、 持续性)数据库恢复概述,故障的种类(4类), 恢复的实现技术(转储)

引言 事务处理技术包括数据库恢复技术和并发控技术。事务是恢复和并发控制的基本单位。数据库在运行中,故障是难免的,发生了故障,就要恢复。 事务的基本概念 1、事务(Transaction)的概念 事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。[银行转账案例来说明] 事务的定义有两种方式: 显式的定义事务: 事务的开始与结束由用户显示控制,在SQL中,定义事务有3条语句。 隐式事务: ...

今天会营业的博客 1397

MySQL 事务的原子性和一致性有什么区别?隔离级别又是什么?

在学习MySQL的事务时,学到事务的四种特性,发现原子性和一致性不是一个意思吗?原子性保证要么全部失败,要么全部成功,这样就保证数据库的一致性了。结合网上搜查资料发现我这个想法是错误的,本篇文章将讲解一下原子性和一致性的区别。原子性:一个事务必须被试为一个不可分割的最小工作单元,事务中的操作要么全部成功,要么全部失败。原子性其实并不能保证一致性一致性: 指事务必须使数据库从一个一致性状态变换到另一个一致性状态,这种状态是语义上的不是语法.....................

爱意时刻减淡,玫瑰不再浪漫 2942

数据库-事务

比如转账业务:现在张三和李四都各有200元,张三要给李四转账100元,那么转账成功后,张三的金额为100元,李四的金额为300元,该事务在数据库中的操作需要执行两条SQL命令,这两条SQL命令必须同时成功或失败。比如第二条SQL语句中的id出现错误,即使第一条SQL语句可以正常执行,但由于我们添加了事务的回滚,所以会回到最初的状态,即转账失败。依旧是上述示例,张三向李四成功转账100元后,虽然张三和李四的金额变了,但相加起来的总金额是不变的,仍是400元。本质上是通过MySQL底层的日志来实现的。

2301_81535770的博客 374
上一篇: anchor对象
下一篇: ubuntu 安装JDK
hellochenlu
博客等级 码龄14年 97粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值