数据库的隔离级别
数据库 级别 隔离
2023-09-11 14:19:18 时间
专栏目录请点击
多事务并发
脏读
事务1
更新了记录,但是还没有提交,此时,事务2
读取了更新后的记录,然后事务1
又进行了回滚。目前,事务2
读取的数据是无效的数据
不可重复读
事务1
读取了记录,事务2
更新了这条记录,并进行了提交,当事务1
再次读取的这条记录的时候,就会发现值不相同了
幻读
- 事务1读取了一个字段,事务2在这个表中插入了几行,当事务1再次读取当前表的时候就会发现表的行数不同了
为了解决上面的问题,数据库就必须拥有隔离并发运行的能力,来避免各种问题
隔离级别
简介
- 一个事务与其他事务的隔离程度称为隔离级别
- 一般隔离性越高,数据的一致性就越好,但并发性就越弱
类别
隔离级别 | 简介 |
---|---|
READ UNCIMMITTED(未提交读) | 事务中的修改,即使没有提交,其他事务也可以看得到,比如脏读问题,不可重复读和幻读都可出现。如无必要,不要随便使用 |
READ COMMITTED(提交读) | 大多数数据库系统的默认隔离级别是READ COMMITTED,这种隔离级别就是一个事务的开始,只能看到已经完成的事务的结果,正在执行的,是无法被其他事务看到的。可以解决脏读问题,但不能解决其他两个问题 |
REPEATABLE READ(可重复读) | 确保事务可以多次从一个字段中读取相同的值,在这个事务持续的期间,禁止其他事务对这个字段进行更新,可以避免脏读和不可重复读问题,但是不能解决幻读问题 |
SERIALIZABLE(可串行化) | SERIALIZABLE是最高的隔离级别,它通过强制事务串行执行(注意是串行),避免了前面的幻读情况,由于他大量加上锁,导致大量的请求超时,因此性能会比较底下,再特别需要数据一致性且并发量不需要那么大的时候才可能考虑这个隔离级别 |
查看数据库的隔离级别
语法一
查询系统变量
SHOW VARIABLES LIKE 'tx_isolation';
SHOW VARIABLES LIKE 'transaction_isolation';
语法二
访问系统变量
SELECT @@tx_isolation;
SELECT @@transaction_isolation;
编辑数据库的隔离级别
设置当前 mySQL的隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
设置全局的隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
相关文章
- Mysql加锁过程详解(6)-数据库隔离级别(1)
- 华为分布式数据库gaussdb,代理长连接会把查询语句分别到主节点上的优化思考
- Facebook如何实现PB级别数据库自动化备份
- 2015年数据库漏洞威胁报告(下载)
- 《数据库技术原理与应用教程第2版》导读
- JavaDemo——java嵌入Sqlite数据库
- 在Xamarin.iOS项目中使用预设数据库
- 《七周七数据库》一一第1章 概述
- 阿里数据库内核月报:2016年04月
- oracle表复杂查询--创建数据库实例
- 数据库的关系代数六大基本操作符
- 浅析MySQL中的计算列(Generated Column列)与计算字段的介绍与应用-如何让数据库中某个字段随时间自动更新
- SQL基础知识笔记:概述(层状/网状/关系模型)、数据类型、操作数据库能力(DDL/DML/DQL)、关系模型(主键、联合主键、外键、外键约束-性能影响、一对一、一对多、多对多、索引、索引效率)、实用SQL语句、事务(四个特性、四种隔离级别)
- 数据库操作
- 如何让其他机器访问你的oracle数据库
- 【机房收费系统】数据库设计
- mysql数据库表结构导出
- SQL Server数据库快照的工作方式
- 数据库学习--wildfly配置postgreSQL数据源