MySQL 之事务 及 其隔离级别

/*
事务:表示一组操作(sql),要么同时成功,要么同时失败,那么这种操作就构成了一个事务。

例如:
张三 给 李四 转账 500元
(1)把张三的余额减少500

(2)把李四的余额增加500

不允许出现:张三的钱减少了500,而李四的钱没有加。
需要在(1)之前开启事务,如果同时成功,那么就提交这个事务,否则就回滚(还原到(1))之前的状态。

涉及到的语句:
(1)开启事务的语句
start transaction;
(2)提交事务/回滚事务
commit;/rollback;

mysql默认情况下是自动提交事务模式,即执行一句,自动提交一句,一旦提交就不能回滚。
如果想要开始手动提交模式,那么可以通过以下语句完成: set autocommit = false;

(1)手动提交模式
如果开始了手动提交模式,那么一组sql语句,直到commit或rollback才算是结束,
从这里commit/rollback到下一个commit或rollback之间算是另一个事务。
每一组操作都要手动提交或回滚。

(2)自动提交模式,然后单独的一组操作,想要开始手动提交模式的话,可以使用
start transaction; #只能用于命令行,不能用于JDBC的Java代码
。。。。
commit;/rollback;

*/

#开启手动提交模式,作用范围是一次连接(从登录到退出)

SET autocommit = FALSE;DELETE FROM t_department WHERE did > 5;INSERT INTO t_department VALUES(NULL,'yy','yyyy');ROLLBACK;
#COMMIT;SET autocommit = TRUE;DELETE FROM t_department WHERE did > 5;START TRANSACTION;
INSERT INTO t_department VALUES(NULL,'yy','yyyy');
UPDATE t_department SET dname = '后勤服务部' WHERE did = 5;
COMMIT;

/*
面试题:事务的特点、特性?
ACID:
(1)原子性:事务的sql语句的划分,必须小到不能在小。
这一组操作是否真的要求:要么同时成功,要么同时失败。
(2)一致性:要保证事务前后数据一致性
例如:张三原来余额:500,李四原来余额:2000,张三要给李四转500
一致性:事务之前 张三原来余额:500,李四原来余额:2000
事务之后:如果失败,张三余额:500,李四原来余额:2000
如果成功,张三余额:0,李四原来余额:2500
(3)隔离性:
两个事务之间是独立。
例如:张三给李四转500
李四给王五转1000
赵六给李四转800
这三个事务是独立的,张三给李四转账的成功与失败与 其他两个操作无关。
(4)持久性:一旦提交就确定了。

mysql中只有Innodb引擎才支持事务。
事务只对DML语句有效,对DDL语句无效。

*/

/*

事务的隔离级别:

1、为什么要隔离?
保证事务的独立的。
但是很多时候,事务之间有互相影响的。两个事务对同一个表的同一个记录的修改,这就互相影响了。

在Java中就是线程安全问题。在mysql中这种问题也是线程安全问题。
那么它表现出来的问题现象:
(1)脏读
一个事务读取了另一个事务还未提交的数据
(2)不可重复读
一个事务读取了另一个事务“修改”已提交的数据,导致一个事务期间对同一个数据的前后两次读取,结果不一致。
(3)幻读
一个事务读取了另一个事务新增加并已经提交的数据,导致一个事务期间记录数不一样。
一个事务读取了另一个事务删除并已经提交的数据,导致一个事务期间记录数不一样。

mysql的默认隔离级别是:(3)
(1)READ-UNCOMMITTED:读取未提交的数据
(2)READ-COMMITTED:读取已提交的数据
(3)REPEATABLE-READ:可重复读取
(4)SERIALIZABLE:序列化
serializable

查看当前连接的隔离级别:select @@tx_isolation;
修改当前连接的隔离级别:set tx_isolation = ‘READ-UNCOMMITTED’;

如果当前连接的隔离级别是READ-UNCOMMITTED,你会读取到别人未提交的数据,这个现象称为脏读。
如果避免“脏读”,就是提高隔离级别,提高为READ-COMMITTED或它以上。

如果当前连接的隔离级别是READ-UNCOMMITTED和READ-COMMITTED,都会出现不可重复的的现象,
如果要避免“不可重复读”,还是提高隔离级别,提高为REPEATABLE-READ或它以上。

(3)REPEATABLE-READ和(4)SERIALIZABLE都能避免脏读、不可重复读、幻读,那么有什么区别呢?
REPEATABLE-READ:行
SERIALIZABLE:表

*/

MySQL 之事务 及 其隔离级别相关推荐

  1. 《MySQL》入门基础知识点大全:数据库操作、增删改查、联表查询、常用函数、MD5加密、事务特性、隔离级别

    MySQL基础知识大全 1.操作数据库 1.1 创建表 1.2 修改表名 1.3 增加表的字段 1.4 修改表的字段 1.4.1 修改表的字段 1.4.2 修改表名 1.5 删除表的字段 1.6 删除 ...

  2. MySql事务4种隔离级别以及悲观锁和乐观锁

    前言:在那鬼公司呆着发现自己居然把事务给搞明白了. 缘由:公司做的一个项目在进行首页内容显示的时候发现查询结果特别慢,有时候需要一到五分钟才能显示出结果.于是乎,我就顺着SQL语句查询慢的原因找了下去 ...

  3. 一文彻底读懂MySQL事务的四大隔离级别

    前言 之前分析一个死锁问题,发现自己对数据库隔离级别理解还不够深入,所以趁着这几天假期,整理一下MySQL事务的四大隔离级别相关知识,希望对大家有帮助~ 事务 什么是事务? 事务,由一个有限的数据库操 ...

  4. MySQL事务原理之事务概述和隔离级别

    MySQL事务概述和隔离级别 事务 事务的特征 事务的控制语句 事务的生命周期 事务执行过程 ACID特性 原子性(A) 一致性(C) 隔离性(I) 持久性(D) 隔离级别 命令 不同隔离级别并发异常 ...

  5. spring 事物的级别_Spring 事务中的隔离级别有哪几种?

    答: TransactionDefinition 接口中定义了五个表示隔离级别的常量: 1.TransactionDefinition.ISOLATION_DEFAULT: 使用后端数据库默认的隔离级 ...

  6. MYSQL相关内容(引擎、隔离级别、实现原理)

    前言 前不久碰到了个mysql隔离级别相关的问题,后来就打算写一篇文章,记录一下mysql相关知识,以后复习也不用辛辛苦苦去找资料了,本文主要从以下几个方面来记录: 存储引擎 存储引擎是MySQL有别 ...

  7. Mysql 8的四种隔离级别以及对应不同类型的锁

    文章目录 1. MySql 8的四个隔离级别 2. 不同类型的锁 3. 四个级别 对应的不同的锁 4. 如何测试每个隔离级别使用的什么锁? 5. 有关事务相关的文档内容总结 6. 什么情况下是行锁,什 ...

  8. mysql写偏斜_数据库隔离级别剖析

    前言 在线应用业务中,数据库是一个非常重要的组成部分,特别是现在的微服务架构为了获得水平扩展能力,我们倾向于将状态都存储在数据库中,这要求数据库能够正确.高性能处理请求,但这是一个几乎不可能达到的要求 ...

  9. 脏读、不可重复读 共享锁、悲观锁 和 事务五种隔离级别

    http://www.cnblogs.com/adforce/archive/2011/04/20/2021929.html 一.脏读.不可重复读.幻读 1.脏读:脏读就是指当一个事务正在访问数据,并 ...

最新文章

  1. 响应因特网端口ping命令_如何使用Ping命令识别基本的Internet问题
  2. oracle完全删除实例
  3. 开发常见单词Java
  4. CentOS 7 yum方式快速安装MongoDB
  5. php怎么创建进程,在php中为长时间运行的进程创建后台进程
  6. VN2VN——中小企业的网络融合之道
  7. python 开发框架 ant_用 Eclipse 和 Ant 进行 Python 开发
  8. 行为模型、价值模型、市场模型
  9. 三、Java NIO Buffer
  10. 海尔正式发布COSMO平台,世界智能制造将要去哪?
  11. 我终于把C++多文件编程理解透彻了
  12. Java 注解 (Annotation)
  13. 使用360家庭卫士-小水滴的个人评测
  14. Qt实现QChart实时绘制动态曲线,代码可复制移植。
  15. 整理形成1996-2018中国地方财政医疗卫生支出
  16. UltraEdit文字编辑器集成脚本引擎教程
  17. SpringBoot 集成 webSocket,实现后台向客户端推送消息
  18. 安科瑞ASJ60-LD16A剩余电流监测仪 照明灯配电箱漏电流保护装置
  19. 澳利率攀升,加息步伐将在某个时候放缓
  20. mysql的增删改查

热门文章

  1. SpringBoot集成gRPC微服务工程搭建实践
  2. ORACLE常用监控语句(未完待续)
  3. MHA高可用 MHA+Keepalive
  4. java jdialog 模态_java – 如何在另一个模态JDialog之上创建一个模态的JDialog
  5. 【李宏毅2020 ML/DL】P57 Unsupervised Learning - Linear Methods | PCA Matrix Factorization
  6. 【数据结构笔记45】通过中间步骤区分简单插入排序和归并排序
  7. django chart mysql,docker Django+mysql+ECharts+AngularJS简单搭建数据可视化
  8. java中ssm付款代码_基于Java+SSM的网上订餐系统、基于JavaWeb的网上订餐系统
  9. C#按Esc后退出对话框
  10. java多线程的api_java多线程之:线程对象一些api