第一百三十七期:一个简单的小案例带你理解MySQL中的事务

事务又叫做TCL,全称是transaction control language,意思是事务控制语言。

作者:Java的架构师技术栈

事务又叫做TCL,全称是transaction control language,意思是事务控制语言。这篇文章还是属于我的mysql基础文章,在前面我们介绍了下面这些基础知识:

  • 数据库的增查改删操作
  • 数据表的增查改删操作
  • 数据的增查改删操作
  • 数据的约束以及增查改删
  • Mysql中的内置函数

这篇文章还是基础系列的文章,主要是介绍mysql中的事务,为了保持文章的完整性,就算你没有看过之前的教程也没问题。

一、事务的理解

张三有1000块钱,李四也有1000块钱,张三给李四500,还剩下500,李四此时就有1500。我们想象着会执行下面的mysql语句:

 
  1. update table user set money=500 where name = "张三";  
  2. update table user set money=1500 where name = "李四"; 

但是在计算机中可能会不一样。可能上面语句执行了下面的没有执行,因此为了保证两条语句要么都执行,要么都不执行,这时候就用到了事务。

事务的意思是一条或者是一组语句组成一个单元,这个单元要么全部执行,要么全不执行。

事务具有四个特性,也是面试常考的四个特性ACID:

  • A(原子性Atomicity):原子性指的是事务是一个不可分割的,要么都执行要么都不执行。
  • C(一致性Consistency):事务必须使得数据库从一个一致性状态,到另外一个一致性状态。
  • I(隔离性Isolation):指的是一个事务的执行,不能被其他的事务所干扰。
  • D(持久性Durability):持久性指的是一个事务一旦提交了之后,对数据库的改变就是永久的。

二、创建一个事务

事务其实可以划分为两大类:隐式的事务和显示的事务:

  • 隐式的事务很简单,比如我们的insert、delete、update、select这些语句都是隐式的事务。
  • 显示的事务指的是带有很明显的开始和结束的标记,下面就来创建一个显示的事务。

步骤一:禁用步骤提交功能

 
  1. set autocommit = 0; 

步骤二:开启一个事务

 
  1. start transaction; 

步骤三:sql语句

 
  1. update table user set money=500 where name = "张三";  
  2. update table user set money=1500 where name = "李四"; 

步骤四:结束事务

commit(提交)或者是rollback(回滚)。如果确定我们的语句没有问题,那么我们就可以commit,如果认为我们的语句有问题,那就rollback。

一个简单的小案例带你理解mysql中的事务

在这里新建了一个表,然后插入了两条数据。下面我们使用事务,来更新一下:

一个简单的小案例带你理解mysql中的事务

在这里我们使用的是commit进行提交。当然如果突然发现我们之前的操作有错误,那就可以使用rollback。

三、事务的隔离级别

上面的事务在单个情况下一般不会出现什么问题,但是如果同时运行多个,就会出现问题了。我们知道并发操作总是会出现各种各样的问题,对于事务来说就会出现下面三个典型的问题:

(1)脏读

有俩事务T1,T2。如果T1读了一条数据,这条数据是T2更新的但是还没提交,突然T2觉得不合适进行事务回滚了,也就是不提交了。此时T1读的数据就是无效的数据。

(2)不可重复读

有俩事务T1,T2。如果T1读了一条数据,之后T2更新了这条数据,T1再次读取就发现值变了。

(3)幻读

有俩事务T1,T2。如果T1读了一条数据,之后T2插入了一些新的数据,T1再次读取就会多出现一些数据。

如何去解决这些问题呢?既然多个事务同时运行不好,那就把他们隔离开来。这时候就用到了事务的隔离性。

一个简单的小案例带你理解mysql中的事务

mysql默认的事务隔离级别为repeatable-read,Oracle默认的是read-committed,

想要去演示事务的隔离级别也很简单,只需要开启两个客户端演示就OK了,在这里就不说了。

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决ffmpeg拉流转发频繁丢包问题max delay reached. need to consume packet

软件: 1、流媒体服务器EasyDarwin-windows-8.1.0-1901141151 2、ffmpeg-20181001-dcbd89e-win64-static 3、直播源:rtsp://192.168.1.168/0 4、流媒体服务器EasyDarwin地址rtsp://192.168.1.28/3 问题现象 [rtsp 0000000000122bc0] max delay reached. …

第一百三十八期:37 个MySQL数据库小知识,为面试做准备

无论是运维、开发、测试,还是架构师,数据库技术是一个必备加薪神器,那么,一直说学习数据库、学MySQL,到底是要学习它的哪些东西呢? 作者:芒果教你学编程 无论是运维、开发、测试,还是架构师&…

第一百三十九期:11月数据库排行:排名前三数据库分数暴跌

DB-Engines 数据库流行度排行榜 11 月更新已发布,与上期数据相比,这期排行榜最大的亮点就是排名前三数据库那引人注目的“红色”分数。 作者:局长 DB-Engines 数据库流行度排行榜 11 月更新已发布,排名前二十如下: ▲…

对话系统之NLU总结报告

文章目录1 项目介绍1.1 背景知识介绍1.2 数据集介绍1.3 评价指标2 技术方案梳理2.1 模型目标2.2 模型介绍2.3 模型实现2.3.1 数据处理2.3.2 构建dataset2.3.3 模型定义2.3.4 训练相关参数2.3.5 训练结果3 项目总结1 项目介绍 1.1 背景知识介绍 对话系统按领域分类&#xff0c…

闲聊型对话系统之NLG总结报告

文章目录1 项目介绍1.1 背景知识介绍1.2 NLG的实现方式1.2.1 基于模板1.2.2 检索式1.2.3 生成式1.3 数据集介绍2 技术方案梳理2.1 模型介绍2.2 评价指标2.3 模型实现2.3.1 数据处理2.3.2 构建dataset2.3.3 模型定义2.3.4 训练相关参数2.3.5 训练结果1 项目介绍 1.1 背景知识介…

spring mvc学习(50):java.lang.ClassNotFoundException: org.springframework.web.servlet. DispatcherSe

今天朋友发了个maven项目给我看,问我为什么启动不了。说实话,一直用Jfinal都快不会用spring了… 还是决定看看。 接收了文件,是maven构建的,打开eclipse,导入maven项目,然后部署到tomcat,启动t…

Luogu2439 [SDOI2005]阶梯教室设备利用 (动态规划)

同上一题&#xff0c;区间改左闭右开就双倍经验了。貌似可以跑最长路。 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a (b); a < (c); a) #defi…

spring mvc学习(51):jsonp

引入jar包 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">…

什么是word2vector

原文地址&#xff1a;https://www.julyedu.com/questions/interview-detail?quesId2761&cateNLP&kp_id30 什么是 Word2vec? 在聊 Word2vec 之前&#xff0c;先聊聊 NLP (自然语言处理)。NLP 里面&#xff0c;最细粒度的是 词语&#xff0c;词语组成句子&#xff0c…

spring mvc学习(52):json数据类型提交

引入jar包 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">…

关注:Eclipse,转贴eclipse CDT的开发文章

致谢&#xff1a;Tinyfool的鼎立相助&#xff01; cdt是在eclipse中编写C程序的插件&#xff0c;虽然还不是很完美&#xff0c;但是是在windows中编写linux下C程序&#xff08;GNU C&#xff09;的一个好途径。按照eclipse的官方网站的要求&#xff0c;要下载如下的东东…

第三课 SVM(2)

1 线性可分的数据集 1.1 超平面 SVM的思想是找到最大间隔的分隔超平面。 在两个分类中&#xff0c;找到能够一条线&#xff0c;以最好地区分这两个分类。这样如果有了新的点&#xff0c;这条线也能很好地做出分类。 这样的线在高维样本中的时候就叫做超平面。 1.2 几何间隔与…

《C Traps and Pitfalls》 笔记

这本书短短的100多页&#xff0c;很象是一篇文章。但是指出的很多问题的确容易出现在笔试的改错题中--------------------------------------------------------------------第1章 词法陷阱1.1 和 1.3 词法分析的"贪心法则"编译器从左到右读入字符&#xff0c;每个符…

spring mvc学习(53):回顾和springmvc返回值类型总结

媒体类型 MIME媒体类型&#xff08;简称MIME类型&#xff09;是描述报文实体主体内容的一些标准化名称&#xff08;比如&#xff0c;text/html、image/jpeg&#xff09;。 因特网有数千种不同的数据类型&#xff0c;HTTP仔细地给每种要通过web传输的对象都打上了名为MIME类型的…

2019hdu多校1

1009 考虑贪心&#xff0c;暴力枚举一位。 $o(676n)$ #include<bits/stdc.h> using namespace std; const int N1e5333; int n,m,zl; int pos[26],cnt[N],t[26],az[N]; char s[N],st[N]; int l[N],r[N],nx[N],zzq[26]; int main(){ios::sync_with_stdio(0);//freopen(&qu…

关于梅花雪的js树

最近一段时间&#xff0c;为了学习java&#xff0c;天天在看别人的框架&#xff0c;为了实现一颗树&#xff0c;找到了一个改写梅花雪的js&#xff0c;下面是一个基本的结构<% page language"java" import"java.util.*" pageEncoding"GBK"%&g…

总和最大区间问题

题目和解题思路来源于吴军著作《计算之魂》。本题目是例题1.3。 文章目录1 问题描述2 解题思路2.1 三重循环2.2 两重循环2.3 分治法2.4 正反两遍扫描的方法2.5 再进一步&#xff0c;假设失效3 应用动态规划1 问题描述 总和最大区间问题&#xff1a;给定一个实数序列&#xff0…

spring mvc学习(54):简单异常处理

引入jar包 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">…

spring mvc学习(55):简单异常处理二

引入jar包 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">…

Jelinek-Merer与Absolute discounting 平滑方法

Jelinek-Merer Jelinek-Merer平滑方法的基本思想是利用低元n-gram模型对高元n-gram模型进行线性插值。 PML(wi∣wi−1)c(wi,wi−1)c(wi−1)P_{ML}(w_i|w_{i-1})\dfrac{c(w_i,w_{i-1})}{c(w_{i-1})}PML​(wi​∣wi−1​)c(wi−1​)c(wi​,wi−1​)​ c(wi,wi−1)c(w_i,w_{i-1}…