MySQL事务

事务用于保证数据的一致性,由一组相关的dml语句组成,该组的dml语句要么全部成功后提交,要么全部失败。进行一个事物操作时,也可以防止其它用户修改表的数据。

举个例子:转账这个操作需要在数据库中先给转载方扣去一定金额,再给收款方增加一定金额,这两个操作是关联的,它们必须都成功,否则转账就出现了问题。

事务的基本操作

注意:表的存储引擎为InnoDB才可以使用事务操作。

START TRANSACTION;

语法:SAVEPOINT 保存点名称

SAVEPOINT point_a;

选择回退到保存点:ROLLBACK TO 保存点
回退到事务开始转台:ROLLBACK

ROLLBACK TO pointa;

一旦提交事务后,所有的操作将生效,其它在使用数据库的人将会看到你操作后表的结果,提交后不可以进行回退。

-- 提交 --
commit

事务隔离

当存在多个连接开启事务操作数据库时,数据库系统需要设置隔离级别以保证各个连接在获取数据时的准确性.如果没有设置事务隔离,将可能引发脏读,不可重复读,幻读等问题

隔离级别 脏读 不可重复读 幻读 加锁读 读未提交(READ UNCOMMITTED) 允许 允许 允许 不加锁 读已提交(READ COMMITTED) 禁止 允许 允许 不加锁 可重复读(REPEATABLE READ) 禁止 禁止 禁止 不加锁 可串行读(SERIALIZABLE) 禁止 禁止 禁止 加锁

加锁读后,必须等待其它事务提交后才进行读取。

查看隔离级别(MySQL8.0): SELECT @@TRANSACTION_ISOLATION
查看隔离级别(MySQL5.7): SELECT @@tx_ISOLATION
设置隔离级别: SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别

-- 设置读已提交
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

说明:系统默认的隔离级别是可重复读,一般情况下不用修改隔离级别

原子性:事务是不可分割的一个单位,一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

持久性:事务处理结束后,对数据的修改就是永久的,

Original: https://www.cnblogs.com/yjh1024/p/16541479.html
Author: Nights_Watch
Title: MySQL事务

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621064/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ATM系统开发(Java版)

    ATM系统Java模拟开发总结 ATM系统开发 技术点分析 1.面向对象编程 每个用户的账户都是一个对象,所以需要设计账户类Accent用于创建账户对象封装账户信息。 2.使用集合…

    数据库 2023年6月16日
    084
  • DevOps

    Docker: ## 安装Docker yum remove docker docker-client docker-client-latest docker-common doc…

    数据库 2023年6月9日
    083
  • Mysql 触发器

    Mysql触发器 1、1 触发器定义 ​ 触发器是由事件来触发某个操作, 事件包括 insert update delete事件, 优势: 保证数据完整性。 触发器可以帮助记录操作…

    数据库 2023年6月11日
    098
  • 集成 nacos注册中心配置使用

    pom <span class="hljs-tag"><<span class="hljs-name">pro…

    数据库 2023年6月6日
    0106
  • idea的使用技巧和必要的设置

    idea 如何开启多个线程 打开下面按钮,然后运行相同的代码即可 打开idea需要选择打开哪一个项目 设置如下,关闭下面选项即可 posted @2022-06-17 21:07 …

    数据库 2023年6月14日
    0108
  • MySQL45讲之InnoDB加锁规则

    前言 本文介绍 MySQL InnoDB 的加锁规则,以及一些需要注意的点。 总结 可重复读隔离级别下,两个原则,两个优化,一个 bug: 原则1:加锁的基本单位是 next-ke…

    数据库 2023年5月24日
    096
  • clash TUN模式

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    094
  • Java泛型用法总结

    普通泛型 <span class="kwd"><span class="kwd">class<span cla…

    数据库 2023年6月16日
    086
  • Goroutines (一)

    Goroutines CSP communicating sequential processes Go 语言中,每一个并发执行单元叫做一个goroutine,语法上仅需要在一个普…

    数据库 2023年6月16日
    095
  • Java 可重入锁的那些事(一)

    本文主要包含的内容:可重入锁(ReedtrantLock)、公平锁、非公平锁、可重入性、同步队列、CAS等概念的理解 显式锁🔒 上一篇文章提到的synchronized关键字为隐式…

    数据库 2023年6月6日
    0138
  • 【JDBC】笔记(5)— 悲观锁和乐观锁的概念;演示行级锁机制

    1.悲观锁和乐观锁的概念: 2.演示行级锁机制: 演示行级锁机制 此程序先开启事务,并使用行级锁锁住”loginName = abc”的那条记录 impor…

    数据库 2023年5月24日
    083
  • 部署前后端为独立的 Docker 节点

    在『服务器部署 Vue 和 Django 项目的全记录』一文中,介绍了在服务器中使用 Nginx 部署前后端项目的过程。然而,当 Web 应用流量增多时,需要考虑负载均衡、流量分发…

    数据库 2023年6月14日
    0112
  • JMeter接口自动化发包与示例

    JMeter接口自动化发包与示例 近期需要完成对于接口的测试,于是了解并简单做了个测试示例,看了看这款江湖上声名远播的强大的软件-Jmeter靠不靠谱。官网:https://jme…

    数据库 2023年6月6日
    081
  • Mysql_事务_存储过程_触发器

    一、什么是事务? 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库…

    数据库 2023年6月11日
    0110
  • Linux–>磁盘分区,挂载

    对于IDE硬盘,驱动器标识符为 “hdx~”,其中”hd”表明分区所在设备类型,这里是指IDE硬盘 “x”为…

    数据库 2023年6月14日
    0114
  • 为什么 SQL 语句使用了索引,但却还是慢查询?

    一、索引与慢查询 聊一聊索引和慢查询,经常遇到的一个问题:一个SQL语句使用了索引,为什么还是会记录到慢查询日志之中?为了说明,创建一个表t,该表3个字段,一个主键索引,一个普通索…

    数据库 2023年5月24日
    0125
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球