mysql中的事务,你理解嘛?

业务又叫做TCL,全称是transaction control language,意思是业务操控言语。这篇文章仍是归于我的mysql根底文章,在前面咱们介绍了下面这些根底知识:

1、数据库的增查改删操作

2、数据表的增查改删操作

3、数据的增查改删操作

3、数据的束缚以及增查改删

5、Mysql中的内置函数

这篇文章仍是根底系列的文章,主要是介绍mysql中的业务,为了坚持文章的完整性,就算你没有看过之前标签10的教程也没问题。

一、事标签19务的了解

张三有1000块钱,李四也有10标签1700块钱,张三给李四500,还剩余500,李四此刻就有1500。标签17咱们幻想着会履行下面的mysql句子:

update table user set money标签10=500 where name = "张三";

update table user set money=1500 where name = "李四";

可是在计算机中或许会不一样。或许上面句子履行了下面的没有履行,因而为了确保两条句子要么都履行,要么都不履行,这时候就用到了业务。

业务的意思是一条或者是一组句子标签11组成一个单元,这个单元要么悉数履行,要么全不履行。

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

A(原子性Atomicity):原子性指的是业务是一个不可分割的,标签1mysql中的业务,你了解嘛?要么都履行要么都不履行。

C(共同mysql中的业务,你了解嘛?性Consistency):业务有必要使得数据库从一个共同性状况,到别的一个共同性状况。

I(阻隔性Isolation):指的是一个业务的履行,不能被其他的业务所搅扰。

D(耐久性Durability):耐久mysql中的业务,你了解嘛?性指的是一个业务一旦提交了之后,对数据库的改动便是永久的。

二、创立一个业务

业务其实能够划分为两大类:隐式的业务标签10和显现的业务

隐式标签19的业务很简单,比方咱们的insert、delete、update、select这些句子都是隐式的业务。

显现的业务指的是带有很明显的开端和完毕的符号,下面就来创立一个显现的业务。

过程一:禁用过程提交功用

set autocommit = 0;

过程二:敞开一个业务

start mysql中的业务,你了解嘛?transaction;

过程三:sql句子

update table user set money=500 where name = "张三";

update table user set money=1500 where name = "李四";

过程四:完毕业务

commit(提交)或者是rollback(回滚)。假如确认咱们的句子没有问题,那么咱们就能够commit,假如以为咱们的句子有问题,那就rollback。

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

​在这里咱们运用的是commysql中的业务,你了解嘛?mit进行提交。当然假如突mysql中的业务,你了解嘛?然发现咱们之前mysql中的业务,你了解嘛?的操作有过错,那就能够运用rollback。

三、业务的阻隔等级

上面的业务在单个情况下一般不会呈现什么问题,标签17可是假如一起运转多个,就会呈现问题了。咱们知道并发操作总是会呈现各式各样的问题,关于业务来说就会标签10呈现下面三个典型的问题:

(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了,在这里就不说了。

Write a Comment

电子邮件地址不会被公开。 必填项已用 *标注