事务又叫做TCL,全称是transaction control language,意思是事务控制语言。这篇文章还是属于我的mysql基础文章,在前面我们介绍了下面这些基础知识:
这篇文章还是基础系列的文章,主要是介绍mysql中的事务,为了保持文章的完整性,就算你没有看过之前的教程也没问题。
一、事务的理解
张三有1000块钱,李四也有1000块钱,张三给李四500,还剩下500,李四此时就有1500。我们想象着会执行下面的mysql语句:
- update table user set money=500 where name = "张三";
- update table user set money=1500 where name = "李四";
但是在计算机中可能会不一样。可能上面语句执行了下面的没有执行,因此为了保证两条语句要么都执行,要么都不执行,这时候就用到了事务。
事务的意思是一条或者是一组语句组成一个单元,这个单元要么全部执行,要么全不执行。
事务具有四个特性,也是面试常考的四个特性ACID:
二、创建一个事务
事务其实可以划分为两大类:隐式的事务和显示的事务:
步骤一:禁用步骤提交功能
- set autocommit = 0;
步骤二:开启一个事务
- start transaction;
步骤三:sql语句
- update table user set money=500 where name = "张三";
- update table user set money=1500 where name = "李四";
步骤四:结束事务
commit(提交)或者是rollback(回滚)。如果确定我们的语句没有问题,那么我们就可以commit,如果认为我们的语句有问题,那就rollback。
在这里新建了一个表,然后插入了两条数据。下面我们使用事务,来更新一下:
在这里我们使用的是commit进行提交。当然如果突然发现我们之前的操作有错误,那就可以使用rollback。
三、事务的隔离级别
上面的事务在单个情况下一般不会出现什么问题,但是如果同时运行多个,就会出现问题了。我们知道并发操作总是会出现各种各样的问题,对于事务来说就会出现下面三个典型的问题:
(1)脏读
有俩事务T1,T2。如果T1读了一条数据,这条数据是T2更新的但是还没提交,突然T2觉得不合适进行事务回滚了,也就是不提交了。此时T1读的数据就是无效的数据。
(2)不可重复读
有俩事务T1,T2。如果T1读了一条数据,之后T2更新了这条数据,T1再次读取就发现值变了。
(3)幻读
有俩事务T1,T2。如果T1读了一条数据,之后T2插入了一些新的数据,T1再次读取就会多出现一些数据。
如何去解决这些问题呢?既然多个事务同时运行不好,那就把他们隔离开来。这时候就用到了事务的隔离性。
mysql默认的事务隔离级别为repeatable-read,Oracle默认的是read-committed,
想要去演示事务的隔离级别也很简单,只需要开启两个客户端演示就OK了,在这里就不说了。
本文转载自微信公众号「Linux开发那些事儿」,作者 LinuxThings 。转载本文请联...
不少Windows 10用户之前都抱怨一个问题,那就是系统的屏幕出现了渲染问题,而微...
简介 “ 大家好我是帅哥欢迎来到帅哥的程序人生我会把经历分享出来助你了解圈内...
一、Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候...
console.log ,作为一个前端开发者,可能每天都会用它来分析调试,但这个简单函...
前言 aop即是面向切面编程,众多Aop框架里Castle是最为人所知的,另外还有死去的...
开发过程中,我们经常会遇到代码回滚的情况。正常人都知道,git 回滚有两大宝: ...
2月26日消息 众所周知,Windows 10 的安全更新和其他重要累计更新通常是在同一天...
互联网业务往往使用MySQL数据库作为后台存储,存储引擎使用InnoDB。我们针对互联...
继 Australis 和 Photon 之后,Mozilla 现又酝酿为 Firefox 带来名为Proton的全...