MySQL事务的概念以及事务隔离级别介绍

40次阅读
没有评论

共计 1489 个字符,预计需要花费 4 分钟才能阅读完成。

本篇内容主要讲解“MySQL 事务的概念以及事务隔离级别介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“MySQL 事务的概念以及事务隔离级别介绍”吧!

先简单介绍一下 MySQL 中事务的概念,它是指:  用于实现某种行为的 SQL 语句的组合,可以是单条 SQL 语句,也可以是多条。  就像线程一样,MySQL 服务器允许多个事务并发执行去更新某些数据,为了保障安全,MySQL 提供了四种隔离级别,用来限制不同事务之间的干扰。

四种隔离级别如下(按照级别由低到高):

read uncommitted(读未提交)

read committed(读已提交)

repeatable read(可重复读)

Serializable(串行化)

接下来按照这个顺序分别进行演示。

** 准备工作 **

由于我本地服务器上只有一个 root 用户,为了后续的演示操作,所以需要再新建一个用户 testB,并授予相应权限。方便起见,下文中 root、testB 开启的事务称为 A、B。

一、read uncommitted(读未提交)

分别登录到用户 root 和 testB,以表 t_ss 作为实验表,通过查询可以看到表 t_ss 是空的。

分别将 root 和 testB 的隔离级别设置为  read uncommitted(  读   未提交)。

接着分别在 root、testB 中开启事务 A、B,然后在 B 中向表 t_ss 插入一条数据。  这时候 B 中的事务还没有提交(commit),我们再在 A 中查表,可以看见,  即使 B 的事务还未提交,A 中也可以查询到事务 B 插入的数据。

到这大家应该都能理解  read uncommitted(  读   未提交)  的含义了,通俗来说就是:  即使事务 B 没有 commit,其它事务也能读取到事务 B 更新的数据,即能够读取事务没有提交的数据。  这是事务隔离级别中等级最低的一个。

二、read committed(读已提交)

将 root 和 testB 的事务隔离级别设置为  read committed(读已提交)。

同样开启两个事务,并在 B 中再插入一条数据,此时 B 事务未提交,当在 A 中查询时,发现并未查询到 B 新插入的数据。

当 commit 事务 B 后,A 成功读取到 B 插入的数据。

总结一下,在 read committed(读已提交)级别时,  其它事务只能读取事务 B 提交后的数据,未提交则读取不到。  这是大部分数据库的默认隔离级别。

三、repeatable read(可重复读)

将事务隔离级别设置为  repeatable read(可重复读) ,并分别开启事务。

A 先查表,有两条数据,然后 B 插入一条数据并 commit,A 再查表,结果还是两条数据,但是 B 中查表所得结果是三条数据。(箭头指示命令执行顺序)

也就是说,当数据库处于 repeatable read(可重复读)时,  同一个事务前后两次所读取的数据必须是一致的,无论事务 B 有没有插入数据。  它是 MySQL 的默认隔离级别。

四、Serializable(串行化)

将 root 的隔离级别设置为  Serializable(串行化) ,开启事务。当在事务 A 中查询表 t_ss 且未 commit 时,B 事务一直在等待,到达指定时间后会报错,显示超时。

在事务 A 提交后,事务 B 才能够成功插入数据。

Serializable(串行化)是等级最高,要求最严的事务隔离级别,在这种情况下,  其它事务必须等待当前事务 commit 后才能执行。

到此,相信大家对“MySQL 事务的概念以及事务隔离级别介绍”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计1489字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)