常见的数据库事务隔离级别
为什么会出现数据库的隔离级别呢?
数据库隔离级别是为了解决数据库并发访问过程中产生的各种数据安全问题.
事务的基本要素(ACID)
原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
事务的并发问题
- 脏读 :读到的数据是未确认的数据 ( 未提交 ) , 如果另一个客户端在操作过程中,回滚了操作.那么用户读到的数据其实是无效数据.
- 不可重复读 :是指一个客户端在同一个事务中多次读取相同的数据 , 结果不一致
- 幻读 :一个客户端多次读取相同的数据,每次得到的结果都跟第一次得到的数据一样.但其实数据已经发生了变化.但是查不到结果.
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
四种事务隔离级别:
- 读未提交
read uncommitted
- 读已提交
read committed
( oracle默认 ) - 可重复读
repeatable read
( mysql默认 ) - 串行事务
serializable
由事务隔离级别产生的几个常见问题:
- 读未提交,导致 ----->>>> 脏读
- 读已提交,导致 ----->>>> 不可重复读
- 可重复读,导致 ----->>>> 幻读
- 查看当前会话隔离级别
select @@tx_isolation;
- 查看当前系统全局隔离级别
select @@global.tx_isolation;
设置当前会话隔离级别
- 设置读未提交
set session transaction isolation level read uncommitted;
- 设置读已提交
set session transaction isolation level read committed;
- 设置可重复读
set session transaction isolation level repeatable read;
- 设置串行化 ( 读写不能并发 )
set session transaction isolation level serializable;
事务操作
- 开启事务
start transaction;
- 提交事务
commit;
- 回滚事务
rollback;
如果此篇文章对你有帮助记得点赞 收藏 + 关注 ! 如有更好的建议或方法可以到 QQ群交流哦:1101584918 !
常见的数据库事务隔离级别相关推荐
- 数据库事务隔离级别-- 脏读、幻读、不可重复读(清晰解释)
一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四 ...
- 数据库事务隔离级别+Spring 声明性事务隔离级别
数据库事务隔离级别 数据库提供了四种事务隔离级别, 不同的隔离级别采用不同的锁类开来实现. 在四种隔离级别中, Serializable的级别最高, Read Uncommited级别最低. 大多数数 ...
- mysql数据库事务隔离级别是_数据库事务隔离级别-MySQL为例 · Sean
在银行系统的存取款过程中,当遇到对一个账户并发存取的时候,系统该如何处理比较好.可能不少人会想到线程同步,然而在应用层使用同步会导致对象锁定,大大影响并发效率.此时,充分利用数据库的事务隔离机制可以很 ...
- 概述MySQL数据库---事务隔离级别
同一个应用程序中的多个事务或不同应用程序中的多个事务在同一个数据集上并发执行时, 可能会出现许多意外的问题,事务并发处理可能引起的问题可分为如下三种类型: 脏读(Drity Read): 已知有两个事 ...
- 数据库事务隔离级别及脏读、不可重复读、幻读的理解
开篇声明,由于两位大佬排版不够美观,然后又发现一些歧义,因此我集大佬之所长,精心整理并加以完善,可放心阅读. http://blog.csdn.net/yuxin6866/article/deta ...
- 数据库事务隔离级别有哪些?
数据库事务隔离级别: 1.Read Uncommitted(读未提交): 2.Read Committed(读已提交): 3.Repeatable Read(可重复读取): 4.Serializabl ...
- mysql数据库事务隔离级别演示
mysql数据库事务隔离级别演示 关键词: 一.基本概念 二.事务的四个特性(ACID) 三.事务的用法 3.1 相关命令 3.2 使用步骤 四.数据库的隔离级别 五.示例演示(每组事务结束手动com ...
- PG数据库事务隔离级别
Postgres数据库事务隔离级别介绍 0. What is Database Transaction? 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列 ...
- 数据库事务隔离级别举例详解
目录 一.前言 1.1.4种事务隔离级别 1.2.3种读现象 二.举例说明 2.1.读未提交 2.2.读已提交 2.3.可重复读 2.4.串行化 一.前言 本文主要对4种事务隔离级别,具体举例说明各自 ...
最新文章
- 3Blue1Brown:“线性代数的本质”完整笔记
- 3n+1猜想(求关键数)
- 科目二倒车入库不论怎么都能入进去的方法
- 关于jsp中 对只转发结果集的无效操作: last 异常
- OpenFoam2.4.0 cannot find input file: `contrib/dist/mofed/debian/changelog解决方案
- 是时候开始用C#快速开发移动应用了
- P3302 SDOI2013森林
- ps2019布尔运算快捷键_超实用:换个角度教你快速理解PS CS6布尔运算
- linux内存管理实验,Linux内存管理机制研究
- HTML与CSS面试题汇总
- 怎么把原本一页的PDF拆分成单独的两页?
- zbox mysql_centos6.5搭建禅道
- authorized_key 不生效。
- 看云上 ClickHouse 如何做计算存储分离
- APP和后端HTTP通信加密思路
- StringBuffer换行
- 【如何在linux环境下排查生产环境java线程阻塞问题】
- ArrayList源码分析
- input设置type为number,禁止输入e等符号,去除上下箭头
- 【MSSQL】SQL SERVER导入中文乱码问题解决