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

1.什么叫数据库事务?

事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态.

                一组逻辑操作单元:一个或多个DML操作.

2.事务处理的原则:保证所有事务都作为一个工作单元执行,即使出现了故障,都不能改变这种执行方式.当在一个事务中执行多个操作时,要么所有的操作都被提交(commit),那么这些修改就永久地保存下来,要么数据库管理系统将放弃所有的修改,整个事务回滚(rollback)到最初状态.

3.数据一旦提交,不可回滚

4.哪些操作会导致数据的自动提交?

                1.DDL操作一旦执行,都会自动提交

                        在JDBC中即使SetAutoCommit(false)开启事务,对DDL操作是失效的

                2.DML默认情况下,一旦执行,就会自动提交

                        我们可以通过SetAutoCommit(false)来开启事务,取消自动提交

事务的ACID特性

1.原子性(Atomicity):原子性是指事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生.

2.一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态.

3.隔离性(Isolation):事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰.

4.持久性:(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响.

数据库并发存在的问题:

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题.

脏读:对于两个事务T1,T2.     T1读取了已经被T2更新但没有提交的字段.之后若T2回滚,T1读取的内容就是临时无效的------------------------>出现在读为提交  1级事务隔离级别

不可重复读:对于两个事务T1,T2.     T1读取了一个字段,然后T2更新了该字段.之后T1再次读该相同字段,值确不同了.--------------------------->第二级别,不可重复读,就是说别人改了,你这边再读就会读到不同数据

幻读:对于两个事务T1,T2.    T1从一个表中读取了一个字段,然后T2在该表插入新数据了.之后T1在同一个事务中读到的是原先的数据-------------------->出现在第三个级别,可重复读

数据库事务的隔离性:数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题.

一个事务与其他事务隔离的程度称为隔离级别.数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据库一致性就越好,但并发性能越弱

在 MySQL 的隔离级别为"读已提交"(Read Committed)时,当一个事务在对一条数据进行更新操作时,其他事务要等待这个数据更新操作的事务完成之后才能访问这条数据。这确保了并发事务之间的数据一致性,也意味着其他事务在第一个事务完成更新之前是无法读取到已更新的数据的。

在"读已提交"隔离级别下,每个事务都只能看到已提交的数据,并且其他未提交的事务对其是不可见的。这种行为是一种折中,既可以保障并发性能,又能维护数据的一致性。

因此,如果一个事务正在更新某一行数据,其他事务如果要对相同行进行更新,将会等待直到第一个事务的更新操作完成。这种等待是通过锁来实现的,以确保数据的一致性和完整性。

四种数据库隔离级别:

READ UNCOMMITTED(读未提交):允许事务读取未被其他事务提交的变更.会出现不可重复读和脏读现象

READ COMMITED(读以提交):只允许事务读取已经被其他事务提交的数据.避免脏读.但是出现不可重复读和幻读问题

REPEATABLE READ(可重复读):确保事务可以多次读到相同值.避免了脏读和不可重复度.但是幻读问题依旧存在

SERIALIZABLE(串行化.序列化读):确保事务可以从一个表中读取相同的行.禁止其他事务对该表执行增删改操作.所有并发问题都可以避免.但是性能就降低了.

Oracle支持的两种事务隔离级别:READ COMMITED和SERIALIZABLE.默认为READ COMMITED

Mysql数据库默认事务隔离级别是三级    Oracle默认事务隔离级别是二级   阿里云Mysql数据库默认是二级

即使你做了全局事务隔离级别,重启后默认恢复到初始级别:Mysql数据库默认事务隔离级别是三级    Oracle默认事务隔离级别是二级   阿里云Mysql数据库默认是二级

查看数据库事务隔离级别

select @@tx_isolation(老版本)

select @@global.tx_isolation(老版本)

select @@global.transaction_isolation(新版本)

设置全局事务隔离级别为读未提交:set global transaction isolation level read uncommitted;

设置全局事务隔离级别为读已提交:set global transaction isolation level read committed;

设置全局事务隔离级别为可重复读:set global transaction isolation level repeatable read;

设置全局事务隔离级别为序列化读:set global transaction isolation level serializable;

在数据库中,有两种设置事务隔离级别的方式:设置当前事务的隔离级别和设置全局事务隔离级别。

设置当前事务的隔离级别:这种设置方式只影响当前事务,不会对其他事务产生影响

例如:SET TRANSACTION ISOLATION LEVEL read committed;

在黑屏中开启事务命令:start transaction;或者SET autocommit = 0;或者SET autocommit = false;

提交事务命令:commit;

回滚事务:rollback;

conn.setTransactionIsolation(Connection.选择事务隔离级别);

上面代码可以控制当前事务的隔离级别,只限于当前事务.

当然你也可以通过

statement.execute(set global transaction isolation level read uncommitted)

executeupdate也行   这样就配置了全局事务隔离级别.在数据库服务器不重启的情况下一直有效

但是当数据库重启后又会恢复默认级别

所有事务隔离级别,当某个事务在update或者delete一条或多条数据时,其他事务不能同时update或delete该数据,需要等待事务结束.这一点是否违背事务隔离级别越高影响并发性能?????该排队还是需要排队

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EDUSRC--简单打穿某985之旅

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

idea leetcode配置

idea leetcode配置 配置页面如下图所示,根据需要,填入登录用户名、密码、文件存放路径,注意如果要使用自定义的代码结构配置,要勾选图中框出来的选项。 Code FileName: $!velocityTool.camelCaseName(${question.tit…

金融网站如何做好安全防护措施?

联网的发展为当代很多行业的发展提供了一个更为广阔的平台,而对于中国的金融业来说,互联网金融这一新兴理念已经为 人们所接受,且发展迅速。我们也都知道金融行业对互联网技术是非常严格的,这对互联网的稳定性和可靠性提出了较高的…

[AutoSAR系列] 1.1 AutoSar 发展历史

AUTOSAR,全称为Automotive Open System Architecture,即汽车开放系统架构。 AutoSar 是一项开源的汽车软件标准,旨在提高汽车电子系统的互操作性和可重用性。AutoSar 成员通常是汽车制造商、电子元件制造商、软件供应商和工具供应商等公司,他们在共同开发和推进 AutoSar 标…

作业来了~~~

#include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include<linux/io.h> #include "head.h" unsigned int major; char kbuf[128] {}; // 定义三个指针指向映射后的虚拟内存 un…

Ubuntu服务器 Clash Dashboard

正文发不出来 链接&#xff1a;【Linux】解决Ubuntu服务器版本无法使用Clash Dashboard的问题 这个图展示了RNA-Seq实验数据生成的流程。下面是该流程的逐步解释&#xff1a; mRNA或总RNA提取&#xff1a;首先&#xff0c;从细胞或组织样本中提取mRNA或总RNA。mRNA是经过剪切…

CentOS7.9离线安装 Nginx

1. 下载Nginx安装包 下载地址&#xff1a;http://nginx.org/download/nginx-1.20.1.tar.gzhttp://nginx.org/download/nginx-1.20.1.tar.gz 2. 找到Nginx安装时需要的依赖包 我这里是下载了CentOS7.9的安装镜像 阿里下载地址&#xff1a;centos-7.9.2009-isos-x86_64安装包…

python 生成html文件并端口展示

1.生成相关的html文件 import json import os import calc import requests import numpy as npwith open(picture, r,encodingutf-8) as f:lines f.readlines() html <html>\n<html lang"zh">\n<head>\n<meta charset"UTF-8">…

Opencv之RANSAC算法用于直线拟合及特征点集匹配详解

Opencv之RANSAC算法用于直线拟合及特征点集匹配详解 讲述Ransac拟合与最小二乘在曲线拟合上的优缺点 讲述在进行特征点匹配时&#xff0c;最近邻匹配与Ransac匹配的不同之处 另外&#xff0c;Ransac也被用于椭圆拟合、变换矩阵求解等 1. 直线拟合 1.1 原理 RANSAC(RANdom …

明星艺人建立百科的步骤和技巧

明星艺人们的知名度对于其事业的成功至关重要&#xff0c;而作为国内最大的中文百科全书网站&#xff0c;百度百科成为了人们获取信息的重要来源。一线明星当然百科不用自己操心&#xff0c;平台和网友就给维护了&#xff0c;但是刚刚走红的明星艺人应提早布局百科词条&#xf…

CUDA 学习记录

1.关于volatile&#xff1a; 对于文章中这个函数&#xff0c; __global__ void reduceUnrollWarps8 (int *g_idata, int *g_odata, unsigned int n) {// set thread IDunsigned int tid threadIdx.x;unsigned int idx blockIdx.x * blockDim.x * 8 threadIdx.x;// convert…

操作系统:线程同步和调度

文章目录 线程同步和调度一、实验目的二、实验要求与内容、过程与结果 系列文章 线程同步和调度 一、实验目的 通过创建线程、分配线程优先级和终止线程的程序设计和调试操作&#xff0c;进一步熟悉操作系统的线程概念&#xff0c;理解Windows 2000线程的生命周期。 通过对事…

18-spring 事务

文章目录 1. xml和注解配置方式的对象2.spring事务传播特性3. 注解事务的初始化流程4. 创建事务信息流程图5. 事务回滚流程图1. xml和注解配置方式的对象 2.spring事务传播特性 事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事…

RHEL 8.6 Kubespray 1.23.0 install kubernetes v1.27.5

文章目录 1. 预备条件2. download01 节点 安装 dockerdownload01 节点 介质下载下载 bastion01节点配置 yum 源bastion01 节点安装 docker5. 安装 docker insecure registrybastion01 部署 nginx 与 镜像入库13.1 配置 config.sh13.2 配置 setup-docker.sh13.3 配置 start-ngin…

Unity中Shader实现UI流光效果

文章目录 前言一、实现思路1&#xff1a;1、采集两张贴图&#xff0c;一张是主纹理&#xff0c;一张是扫光纹理2、在 v2f 定义一个二维变量 “uv2” 来存放 uv 偏移后的值3、在顶点着色器中&#xff0c;仿照之前的 uv 流动效果,与 _Time相乘后存放于 uv2 中4、最后&#xff0c;…

任务分配问题(回溯法)

算法设计 问题描述 有n&#xff08;n≥1&#xff09;个任务需要分配给n个人执行&#xff0c;每个任务只能分配给一个人&#xff0c;每个人只能执行一个任务。 第i个人执行第j个任务的成本是c[i][j]&#xff08;1≤i&#xff0c;j≤n&#xff09;。求出总成本最小的分配方案 …

【JVM】synchronized与锁升级

文章目录 1. synchronized锁优化背景2. synchronized锁性能优化过程2.1 java5以前2.2 monitor锁2.3 java6开始 3. 无锁4. 偏向锁4.1 背景4.2 理论落地4.3 技术实现4.4 偏向锁的撤销4.5 题外话 5. 轻量级锁5.1 轻量级锁的加锁5.2 轻量级锁的释放5.3 锁升级 6. 重量级锁7. 锁升级…

springweb+vue前后端分离开发,集成部署

背景&#xff1a; 在自己做测试的时候&#xff0c;由于需要项目和项目的前端页面使用同样接口访问&#xff0c;所以需要将前端代码部署到后端项目下。前端采用vue&#xff0c;后端采用springboot。 首先时建立一个vue项目&#xff0c;这个可以参照网上的案例&#xff0c;创建方…

Node.js的安装

直接在浏览器中搜索Node.js即可 打开下载好的文件 验证是否安装成功 在cmd中输入 node -v&#xff0c;若结果为版本号那就是成功的 环境配置 配置全局模块所在的路径缓存cache的路径 在安装目录中新建两个文件夹&#xff0c;文件夹名为:node_cache和node_global 输…

C++之this指针

前言 C中对象模型和this指针是面向对象编程中的重要概念。对象模型描述了对象在内存中的布局和行为&#xff0c;包括成员变量、成员函数的存储方式和访问权限。this指针是一个隐含的指针&#xff0c;指向当前对象的地址&#xff0c;用于在成员函数中引用当前对象的成员变量和成…