iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 事务管理
  • 844
分享到

MySQL 事务管理

MySQL事务管理 2015-09-09 18:09:23 844人浏览 才女
摘要

  事务的4个特性(ACID) 原子性 Atomicity。每个事务中的操作,要么都成功,要么都失败 一致性 Consistency。事务执行前后,数据库中的数据应该保持一致 隔离性 Isolation。事务之间应该是隔离的,事

MySQL 事务管理

 

事务的4个特性(ACID)

  • 原子性 Atomicity。每个事务中的操作,要么都成功,要么都失败
  • 一致性 Consistency。事务执行前后,数据库中的数据应该保持一致
  • 隔离性 Isolation。事务之间应该是隔离的,事务之间互不影响、干扰
  • 持久性 Durability。事务一旦提交,便会将修改持久化到数据库

 

 

事务管理的相关命令

start transaction;  #开始事务
sql语句1;
sql语句2;
.....

commit; #提交事务

#rollback; #回滚

 

 

 

流程示例

start transaction;

insert into tb_user (name,age) values ("zhangsan",20);  #显示Query OK,这条sql语句可以成功执行

insert into tb_user (name,age) values ("李四","age");  #显示ERROR,发生错误。只是说这条语句执行错误,但后面还可以执行sql语句

insert into tb_user (name,age) values ("wangwu",20);  #显示Query OK,

 

如果此时commit;提交,会把执行成功的2个sql语句做的修改持久化数据库,失败的sql语句则忽略。

 

其实发生ERROR时,为了做到事务的原子性,就应该rollback;回滚。

并不是说start transaction;  .....  commit;  会自动维持事务的4个特性,全部成功就持久化到数据库,某些sql语句发生错误,就自动回滚,不是这样的。

事务的4个特性需要我们自己来维持。

 

 

代码中使用事务也一样:

......   //开启事务

try{

  ..... //要执行的多条sql语句

      commit;  //若前面都正常执行,则提交

}catch(Exception e){

  rollback;  //发生错误就回滚

}

 

先开启事务,把要执行的多个sql语句放到try中,都正确执行那就提交,发生错误就回滚。

 

 


 

 

catch就是对异常的处理,既然捕获了异常进行了处理,就不会往上一级抛了。

如果每一级都是throws往上抛,抛到JVM,JVM默认的异常处理方式是:打印异常信息,终止程序运行。

 

比如说下面这段代码:

        System.out.println(1);
        try{
            System.out.println(1/0);
        }catch (Exception e){
            System.out.println("error");
        }
        System.out.println(2);
1
error
2

并不会自动在控制台打印异常信息,终止程序。

要看异常信息,可以在catch中 System.out.println(e.getMessage()); 打印出来

 

 


 

 

 

事务的并发

事务的并发即同时执行多个事务,主要涉及事务的隔离性、隔离级别。

 

1、事务并发执行可能出现的问题

(1)脏读     一个事务读取其它事务尚未提交的数据

事务B对数据库做了修改(执行成功但尚未提交),事务A读取这些已修改的记录,A读取之后,B进行了回滚,A读取到的数据变成了脏数据、无效数据,即脏读。

隔离级别 Read commited 已提交读,可解决脏读问题,等到使用这些记录的事务提交后才读取数据。

 

 

(2)不可重复读     前后多次读取,读取的数据内容不一致(期间进行了update操作)

比如说我卡里有2000,打算在ATM上取款2000,输入取款金额2000点击确定,系统查询账户余额,还有2000,是够的;

我老婆的微信绑定了我的卡,这时把我卡里的1000给花了,账户余额为1000

ATM执行扣款-2000(在账户余额的基础上扣,money-2000,又要获取账户余额),并往外吐钱2000,1000-2000=-1000

ATM前后2次读取余额(同一条记录的数据),读取的数据内容不一致,这就出现问题了。

 

隔离级别 Repeatable read 重复读,可解决不可重复读的问题,当有事务读了某些行的数据后,这些行会被住,不允许其它事务对这些行进行修改,这样重复读取到的数据就是一致的。

因为使用某些行时,这些行会被锁定,其它事务不能读取这些(可能会被修改的)行,也避免了脏读问题。

 

 

(3)幻读(虚读)   前后多次读取,读取的记录数不一致(期间进行了insert、delete操作)

隔离级别 Serializable 可解决幻读问题,不允许事务并发,最安全,但性能最差,基本不用。

 

以上3个是读问题,还可能产生一个写问题:丢失更新。

 

(4)丢失更新  丢失更新是不可重复读中的一种特殊情况,2个事务都要修改记录内容(update),后提交的覆盖了前面提交的

时间 取款事务 支票转账事务
T1 开始事务  
T2   开始事务
T3 查询账户余额为1000元  
T4   查询账户余额为1000元
T5 取出100,把存款余额改为900元  
T6 提交事务  
T7   汇入100元,把存款余额改为1100元
T8   提交事务

 

 

 

 

 

-100的更新操作丢失了。

 

 

2、4种隔离级别

  • Read uncommitted:未提交读,解决不了任何读问题,安全性最低,但事务执行效率最高
  • Read committed:已提交读,解决了脏读,但不可重复读、虚读有可能发生。oracle默认值。
  • Repeatable read:重复度,解决了脏读、不可重复读,但虚读有可能发生。Mysql默认值。
  • Serializable:串行化,不允许事务并发,可解决所有并发问题,安全性最高,但事务执行效率最低

一般折中选择第2、3项,使用默认的即可,不必进行设置。

 

 

 

3、查看、设置隔离级别


#mysql
5
select @@tx_isolation; #查看当前会话使用的隔离级别
select @@global.tx_isolation; #查看全局设置的隔离级别


#mysql 8
select @@transaction_isolation;
#查看当前会话使用的隔离级别
select @@global.transaction_isolation; #查看全局设置的隔离级别
#mysql5、mysql8的查看方式不同,5是tx,8是transaction,如果不对应会报错Unknown system variable "tx_isolation"|"transaction_isolation"


#设置事务的隔离级别,5、8一样
set session transaction isolation level repeatable read; #设置当期会话使用的隔离级别为repeatable read
set global transaction isolation level repeatable read; #设置全局使用的隔离级别是repeatable read

 

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 事务管理

本文链接: https://www.lsjlt.com/news/4867.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL 事务管理
      事务的4个特性(ACID) 原子性 Atomicity。每个事务中的操作,要么都成功,要么都失败 一致性 Consistency。事务执行前后,数据库中的数据应该保持一致 隔离性 Isolation。事务之间应该是隔离的,事...
    99+
    2015-09-09
    MySQL 事务管理
  • mysql事务管理的用法
    这篇文章主要讲解了mysql事务管理的用法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。什么是事务管理:可以把一系列要执行的操作称为事务,而事务管理就是管理这些操作要么完全执行...
    99+
    2022-10-18
  • 【MySQL】MySQL索引、事务、用户管理
    20岁的男生穷困潦倒,20岁的女生风华正茂,没有人会一直风华正茂,也没有人会一直穷困潦倒… 文章目录 一、MySQL索引特性(重点)1.磁盘、OS、MySQL,在进行数据IO时三者的关系2.索引的理解3.聚簇索引(索引和数据放在一...
    99+
    2023-08-16
    数据库 mysql
  • mysql事务管理操作详解
    本文实例讲述了mysql事务管理操作。分享给大家供大家参考,具体如下: 本文内容: 什么是事务管理 事务管理操作 回滚点 默认的事务管理 首发日期:2018-04-18 什么是事务管理: ...
    99+
    2022-05-23
    mysql 事务管理
  • MySQL事务管理的作用详解
    目录1.为何使用事务管理2.数据库事务的原理3.什么是事务3.1 事务的特性ACID3.2 事务的并发问题3.3 隔离级别4.Spring事务管理1.为何使用事务管理 可以保证数据的完整性。事务(Transaction)...
    99+
    2022-08-25
  • MySQL事务管理是什么意思
    小编给大家分享一下MySQL事务管理是什么意思,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!事务处理用来维护数据库等完整性,保证mysql操作要么成功,要么失败(myisam不支持事务)1、关...
    99+
    2022-10-18
  • MySQL事务管理的方法有哪些
    小编给大家分享一下MySQL事务管理的方法有哪些,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!事务处理用来维护数据库等完整性,保证mysql操作要么成功,要么失败(myisam不支持事务)1、...
    99+
    2022-10-18
  • 【MySQL系列】MySQL的事务管理的学习(一)_ 事务概念 | 事务操作方式 | 事务隔离级别
    「前言」文章内容大致是MySQL事务管理。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、事务概念二、事务的版本支持三、事务提交方式四、事务常...
    99+
    2023-09-09
    mysql 学习 adb
  • MySQL事务处理
    概述 在MySQL中只有使用了InnoDB数据库存储引擎的数据库或表才支持事务。 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部成功,要么全部失败。 事务用来管理DDL、DML、DCL操作,比如:insert、...
    99+
    2014-12-03
    MySQL事务处理
  • Mysql事务原理
    一、什么是事务 事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元); 事务的四大特性: 原子性(Atom...
    99+
    2020-08-23
    Mysql事务原理
  • Spring的事务管理
    一、事务的基础知识数据库事务:复杂的事务要分步执行,要么整体生效、要么整体失效。必须满足:原子性、一致性、隔离性、持久性。数据并发问题:脏读:A读取了B未提交的更改数据。    &nbs...
    99+
    2022-10-18
  • 怎么理解PostgreSQL事务管理中的子事务
    本篇内容主要讲解“怎么理解PostgreSQL事务管理中的子事务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解PostgreSQL事务管理中的子事务”吧...
    99+
    2022-10-18
  • mysql事务处理(转)
    mysql事务处理(转)[@more@]缺省的,MySQL 运行在 autocommit 模式。这就意味着,当你执行完一个更新时,MySQL 将立刻将更新存储到磁盘上。 如果你使用事务安全表 (例如 Inn...
    99+
    2022-10-18
  • 【MySQL系列】MySQL的事务管理的学习(二)_ 再次理解隔离性
    「前言」文章内容大致是MySQL事务管理,续上一篇。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 七、再次理解隔离性7.1 数据库并发的场景有7...
    99+
    2023-09-30
    mysql 学习 android
  • MySQL中Spring管理的事务开启后不提交引起的事故
    1. 前言 了解到一个事故,在MySQL数据库中,使用Spring管理的事务在开启以后没有在操作结束时提交或回滚,使得原有线程在后续执行数据库操作时可能继续使用原有事务,且不会提交,导致对数据库的修改...
    99+
    2023-09-03
    spring mysql java
  • 怎么理解PostgreSQL事务管理
    本篇内容介绍了“怎么理解PostgreSQL事务管理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Th...
    99+
    2022-10-18
  • 怎么理解MySQL事务
    这篇“怎么理解MySQL事务”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么理解MySQL事务”文章吧。事务指逻辑上的一组...
    99+
    2023-06-26
  • SpringMVC+MyBatis 事务管理(实例)
    前言        spring事务管理包含两种情况,编程式事务、声明式事务。而声明式事务又包括基于注解@Transactional和tx+aop的方式。那么本文先分析编...
    99+
    2023-05-31
    springmvc mybatis 事务管理
  • Spring中怎么管理事务
    今天小编给大家分享一下Spring中怎么管理事务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是事务一个数据库事务是一个...
    99+
    2023-07-02
  • MySQL基础篇(06):事务管理,锁机制案例详解
    本文源码:GitHub·点这里 || GitEE·点这里 一、锁概念简介 1、基础描述 锁机制核心功能是用来协调多个会话中多线程并发访问相同资源时,资源的占用问题。锁机制是一个非常大的模块,贯彻MySQL的几大核心难点模块:索引,...
    99+
    2018-06-26
    MySQL基础篇(06):事务管理,锁机制案例详解
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作