超详细的事务四大特性、隔离级别解读(带SQL语句)

数据库 MySQL
一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

事务的四大特性 ACID

原子性:事务的所有操作要么全部成功,要么全部失败回滚。

一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态。

隔离性:一个事务的执行不受其他事务的干扰。

持久性:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

隔离级别产生问题

脏读:在一个事务处理过程里读取了另一个未提交的事务中的数据(未提交意味着这些数据可能会回滚,可能最终不会存到数据库)。

不可重复读:不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了,读取了前一个事务提交的数据。

幻读:事务在检索期间,其它事务对数据执行了操作,导致前后两次检索的数据不一样。

例如:事务1对一个表中所有数据某个字段值从“Y”修改为“N”的操作,这时事务2又对这个表中插入了一行数据,而这个数据的字段值是为“Y”。事务1如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是事务2中添加的,就好像产生幻觉一样,这就是发生了幻读。

幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。

MySQL数据库的四种事务隔离级别(从低到高)

Read Uncommitted(读未提交):所有事务都可以看到其他未提交事务的执行结果。(基本上没用)。

Read Committed(读已提交):一个事务只能看见已经提交事务所做的改变。

Repeatable Read(可重读):确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。(MySQL的默认事务隔离级别)

Serializable(可串行化):通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。

隔离级别

脏读

不可重复读

幻读

读未提交

不能避免

不能避免

不能避免

读已提交

能避免

不能避免

不能避免

可重读

能避免

能避免

不能避免

可串行化

能避免

能避免

能避免

查看mySQL的数据库隔离级别

先看下mysql版本,执行对应sql语句。

-- 查看版本
select version();
-- 旧版本也就是5.x
select @@tx_isolation;
-- 新版本
select @@transaction_isolation;

查询mysql版本

查询mysql的隔离级别

-- 设置read uncommitted级别:
set session transaction isolation level read uncommitted;
-- 设置read committed级别:
set session transaction isolation level read committed;
-- 设置repeatable read级别:
set session transaction isolation level repeatable read;
-- 设置serializable级别:
set session transaction isolation level serializable;
责任编辑:姜华 来源: 今日头条
相关推荐

2020-09-21 18:44:35

MySQL

2018-07-17 10:58:45

数据库数据库事务隔离级别

2020-04-07 09:21:45

MySQL数据库SQL

2019-08-05 09:19:45

PG事务隔离级别数据库

2010-10-19 13:52:28

SQL Server事

2009-06-29 17:54:47

Spring事务隔离

2018-12-19 16:46:38

MySQL事务隔离数据库

2010-11-19 16:13:06

oracle事务隔离级

2017-08-09 14:34:12

MysqlJavaPython

2010-05-25 08:34:10

C# 4.0

2011-04-02 09:45:00

Ubuntu 11.0特性

2021-08-30 20:12:11

MySQL事务隔离

2009-03-26 10:29:10

故障事务日志SQL Server

2013-07-29 13:41:40

Dell/vWorks

2021-08-04 13:19:42

MySQL 事务隔离

2021-07-26 10:28:13

MySQL事务隔离

2024-04-26 09:17:20

MySQL事务隔离

2009-02-27 13:07:00

服务器解析基本特性

2010-07-09 14:51:13

UML类设计原则

2013-09-17 09:55:58

企业PC
点赞
收藏

51CTO技术栈公众号