事务及事务的控制.特性

news2024/11/26 18:24:15

一.事务

1.事务定义

​ 逻辑上多个DML操作形成的一个整体,多个DML操作要么全都执行成功,要么全都执行失败,如果是DDL的操作会自动提交事务.

2.事务的控制

命令

  • start transaction开启事务
  • rollback 回滚
  • commit提交事务

mysql默认自动提交事务,每个DML执行完毕后,直接提交事务

以下是一个使用例子:

1.首先打开mysql登录,创建一个user表,我事先在表里插入了数据,然后执行start transaction命令,并查询表中数据,如下图所示.

2.执行一条sql语句,删除username为张三的所有数据,然后查询表中剩余数据.

3.如果此时执行rollback命令,会回到在开启事务时还未执行任何命令的时候,如下图表中数据和图1一致

4.再执行delete语句删除,执行commit之后,再查询表中数据是无法回滚到之前未删除时的数据

三.事务的特性ACID

  • 原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

  • 一致性(Consistency)事务前后数据的完整性必须保持一致。

  • 隔离性(Isolation)事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用 户的事务所干扰,多个并发事务之间数据要相互隔离,正常情况下数据库是做不到这一点的,可以设 置隔离级别,但是效率会非常低。

  • 持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的, 接下来即使数据库发生故障也不应该对其有任何影响。

四.事务的并发

​ 多个事务同时操作相同的数据

​ 多个事务之间要有一定的隔离策略 我们称之为隔离级别,不同的隔离级别所出现的数据的问题也不同

隔离级别

  • read-uncommitted 一个事务可以读取到另一个事务未提交的数据

  • read-committed 一个事务只能读取到另一个事务提交的数据

  • repeatable-read 可重复读

  • serializable 串行化 所有的事务不以并发形式运行

隔离级别越高,数据的问题就越少,效率就越低,隔离级别的设置看业务对数据的容忍度,选择最低的

事务并发的数据的问题

​ 1 脏读 一个事务读取到了另一个事务未提交的数据

​ 2 不可重复读 在一个事务之内,反复读取数据发现数据不一致(数据记录数不变,数据某一条发生改变)

​ 3 幻读 在一个事务之内反复读取表格,发现表格的记录数变化

4种隔离级别分别出现的问题

read-uncommitted 脏读 不可重复读 幻读

read-committed 不可重复读 幻读

repeatable-read 幻读 (mvcc的加入,理论上的幻读也不存在了)

4.JDBC控制事务

Connection对象可以控制事务是否 自动提交,回滚,提交

public class TestTransaction {
    @Test
    public void testJDBCTransaction() throws Exception{
        /*connection 默认自动提交事务*/
        Connection connection = JDBCUtils.getConnection();
        // 设置connection不要自动提交事务
        connection.setAutoCommit(false);

        PreparedStatement pst = connection.prepareStatement("update `user` set username = ? where uid = ?");

        try {
            pst.setObject(1,"李四");
            pst.setObject(2,3);
            pst.executeUpdate();

            //System.out.println(1/0);

            pst.setObject(1,"赵六");
            pst.setObject(2,5);
            pst.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
            connection.rollback();
        } finally {
            connection.commit();
        }

        JDBCUtils.release(null,pst,connection);

    }
}

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

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

相关文章

【Linux】编译器gcc/g++ 、程序翻译过程、动静态库

目录 1.gcc/g Linux编译器1.1. gcc与g的安装1.2. gcc与g用法1.2.1.gcc用法1.2.2. g用法 1.3. 程序翻译的过程1.3.1. 前提知识:1.3.2. 预处理(语言种类不变)条件编译用途: 1.3.3. 编译(生成汇编语言)1.3.4. …

性能测试工具之JMeter

JMeter Apache JMeter应用程序是开源软件,是一个100%纯Java应用程序,旨在负载测试功能行为和衡量性能。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。 JMeter是一个免费、开源、跨平台的性能测试工具,于20世纪90年代后期面世。这是一个成熟、健全且具有…

‘Task‘ object is not callable ERROR

pycharm 调试异步的代码报错 TypeError: ‘Task‘ object is not callable ERROR: Exception in callback <Task 解决方法:点击菜单栏帮助-查找操作-注册表,在注册表中搜索python.debug.asyncio.repl禁用即可

卷大模型,还是卷应用?一次看明白

自从ChatGPT横空出世以来,中美之间围绕大模型的科技竞争愈演愈烈,也渐渐分化出两条差异化发展路线:一派侧重将AI能力投入应用场景,另一派则侧重让基础模型能力更强。于是,“卷应用”还是“卷大模型”成为中国许多新入场…

phpmailer如何配置SSL以发送安全电子邮件?

phpmailer支持哪些邮件附件类型?如何使用phpmailer? PHPMailer作为一个广泛使用的PHP邮件发送类库,支持通过SSL发送加密邮件,以确保信息在传输过程中的安全性。AokSend将探讨如何配置PHPMailer以使用SSL发送安全的电子邮件。 Ph…

M12防水分线盒双通道PNP型8路预铸线缆半导体制造设备

M12防水分线盒双通道PNP型8路预铸线缆,作为工业自动化设备中关键的组件之一,在提升系统稳定性与可靠性方面发挥着至关重要的作用。以钡铼技术DB系列为例,这款8路M12双通道预铸线缆分线盒在设计和材料选择上均体现了工业级的高标准&#xff0c…

解决方案:如何在虚拟机中扩展 Windows 11 C 盘,绕过恢复分区的限制!

第2章 背景 不管是虚拟化还是物理机,我们安装Windows 11 时候经常遇到无法直接扩容盘,我们简单介绍下Windows中C盘组成。 ### 恢复分区的目的 恢复分区是 Windows 操作系统安装过程中创建的一个特殊分区,主要用于以下目的: 1. …

如何修复 VLC 无法播放 MKV 问题

VLC 是一个媒体播放器,您可以用它来播放各种格式的音频或视频文件。但有时,您无法在 VLC 媒体播放器上运行 MKV 文件。问题可能是黑屏、没有声音、视频断断续续或错误消息(例如“无法识别的编解码器:VLC 无法识别音频或视频编解码…

自助创建 1Panel 应用

自助创建 1Panel 应用 前言 1Panel 作为一款开源的 Linux 服务器运维管理面板,其优质的 应用商店 想必也是很多人喜爱它的原因,除了官方的 应用列表 ,开源社区内也涌现出了许多优质的第三方应用商店资源,比如 okxlin/appstore 等…

【MySQL】什么是索引?了解索引的底层原理

索引的概念 索引是一种用于提高数据库查询效率的数据结构。它类似于书籍的目录,通过快速定位数据的方式,减少了数据检索的时间。索引在数据库表中可以被看作是一个指向数据的指针,它们存储了列的值及其对应行的位置,从而使得数据…

《老俞闲话|唯爱和热情不可辜负》读后感

《老俞闲话|唯爱和热情不可辜负》读后感 俞敏洪先生的这篇讲话充满了深情与智慧,他以自己丰富的人生经历和教育实践,向我们展现了一位教育家对于教育事业的热爱和对教师角色的深刻理解。 情感真挚,触动人心 俞敏洪先生的讲话中流…

嵌入式day25

进程线程 多任务编程 1、进程 2、线程 进程(process) 进行中的程序 --- 正在运行中的程序 进程 --- 程序的一次执行的过程 进程 是程序的一个实例 进程是跑起来的程序 一个程序可以对应多个进程 程序 静态 硬盘 进程 动态 内存 为什么需要进程…

ECharts 数据可视化 入门基本知识 下载安装常用的图表 【1】

ECharts一个基于 JavaScript 的开源可视化图表库,即将数据以图形或图像的方式展现成在屏幕上显示出来,这种方式称为数据可视化。数据可视化有助于我们分析数据,帮助我们更深入更直观的理解数据。今天回顾顺便总结一下echarts的基本知识&#…

基于SpringBoot和Vue框架的体育馆场地预约系统的设计与实现---附源码15155

摘要 本研究设计和开发了一款体育馆场地预约系统。该系统旨在提供一个方便、高效的方式,让用户能够轻松预约体育馆场地,并实现对预约信息的管理与统计。系统主要分为普通用户和管理员两个角色。普通用户可以浏览通知公告、体育资讯,查看各个体…

并发编程(第二天)

interrupt 方法详解 打断 sleep,wait,join 的线程 这几个方法都会让线程进入阻塞状态 打断 sleep 的线程, 会清空打断状态打断正常运行的线程 打断正常运行的线程, 不会清空打断状态打断 park 线程 打断 park 线程, 不会清空打断状态 如果打断标记已经…

Apache Tomcat服务器版本号隐藏

渗透测试时发现有一台服务器的404报错页面中,有Apache Tomcat的版本号信息显示,发生了信息泄露,可能导致服务器被攻击。如下所示: 解决步骤如下: 1. 隐藏HTTP响应头中的Server信息 Tomcat默认会在HTTP响应头中包含S…

Java面试八股之消息队列通常由哪些角色组成

消息队列通常由哪些角色组成 消息队列系统通常涉及几个核心角色,这些角色协同工作以实现消息的传递和处理。主要的角色包括: 生产者(Producer): 生产者是消息的创建者,负责将消息发送到消息队列中。生产者…

【八数码】

题目 错误代码 #include<bits/stdc.h> using namespace std; typedef pair<string, int> PII; #define x first #define y secondstring aim "12345678x"; int ans 0x3f3f3f3f; unordered_map<string, int> m; void bfs(string s, int pos) {qu…

《花100块做个摸鱼小网站! 》第二篇—后端应用搭建和完成第一个爬虫

一、前言 大家好呀&#xff0c;我是summo&#xff0c;前面已经教会大家怎么去阿里云买服务器&#xff08;链接在这&#xff0c;需要自取&#xff1a;https://developer.aliyun.com/huodong/dashiblogger?userCodemtbtcjr1&#xff09;&#xff0c;以及怎么搭建JDK、Redis、My…

R 语言学习教程,从入门到精通,R 数据类型(6)

1、R 数据类型 数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。 变量的类型决定了变量存储占用的空间&#xff0c;以及如何解释存储的位模式。 R 语言中的最基本数据类型主要有三种&#xff1a; 数字 逻辑 文本 数字常量主要有两种&#xff1a; 逻辑类型在许多…