【MySql】MySql事务常见操作

这篇具有很好参考价值的文章主要介绍了【MySql】MySql事务常见操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

准备工作

  • 将mysql的默认隔离级别设置成读未提交
set global transaction isolation level read uncommitted;

注意:设置完毕之后,需要重启终端,进行查看

select @@tx_isolation  

【MySql】MySql事务常见操作

  • 创建测试表
mysql> create table if not exists account(
    -> id int primary key,
    -> name varchar(50) not null default '',
    -> blance decimal(10,2) not null default 0.0
    -> )engine=InnoDB default charset=utf8;
Query OK, 0 rows affected (0.22 sec)

【MySql】MySql事务常见操作

并且同时启动两个客户端,即两个SSH渠道。

事务常见操作方式

先查看当前事务的提交方式:这里我们之前设置成自动提交了

show variables like 'autocommit';

【MySql】MySql事务常见操作

启动事务:

-- 方式一
start transaction;

-- 方式二
begin;

【MySql】MySql事务常见操作

创建一个保存点:

savepoint s1;

现在,我们给一端插入数据并且设置保存结点:

【MySql】MySql事务常见操作

此时的account表中的数据如下:

【MySql】MySql事务常见操作

现在,事务进行回滚rollback to s3:

【MySql】MySql事务常见操作

此时的account表中的王五这条数据就没有了:

【MySql】MySql事务常见操作

如果回滚到上面设置的保存点s1,那么account表中的数据自然就没有了。这就是回滚事务。

结束事务:

commit;

【MySql】MySql事务常见操作

  • 这上面的操作是设置保存点的,如果没有保存点

【MySql】MySql事务常见操作

此时查看表account的数据:数据全没了

【MySql】MySql事务常见操作

直接rollback,把从开始启动事务的所有操作全部丢弃。

  • 事务持久化

【MySql】MySql事务常见操作

此时再来查看表account:

【MySql】MySql事务常见操作

此时即使后续在进行rollback操作,也没有影响了。

此时的数据永久化保存在数据库里了。也就是事务一经提交,就没办法再回滚了。也就是回滚只能在事务运行进行的期间,事务提交之后,无法回滚

  • **事务运行期间出现异常,客户端崩溃,MySQL自动会回滚 **

先来看一下现在有一个表account,以及两个客户端,也就是以下的情况:(注意,事务是自动提交的show variables like ‘autocommit’;)

【MySql】MySql事务常见操作

现在来看一下客户端崩溃,自动回滚的情况:

ctrl + \ 异常终止MySQL

【MySql】MySql事务常见操作

另外,只要把事务统一commit之后,这个数据就直接被插入到数据库中,并不会因为客户端崩溃这种情况而出现数据回滚。

  • 证明begin操作会自动更改提交方式,不会受MySQL是否自动提交影响

关闭自动提交

set autocommit=1;

【MySql】MySql事务常见操作

插入数据commit后客户端崩溃:

【MySql】MySql事务常见操作

此时的田七这条数据是存在的了

【MySql】MySql事务常见操作

  • 证明单条 SQL 与事务的关系

场景一:先关闭自动提交

【MySql】MySql事务常见操作

account表中的数据如下:

【MySql】MySql事务常见操作

现在执行单sql语句:数据被删除,但是如果aborted,当前的数据会自动回滚!

【MySql】MySql事务常见操作

场景二:先打开自动提交

【MySql】MySql事务常见操作

表account的数据如下:

【MySql】MySql事务常见操作

现在执行单sql,aborted之后,删除就是删除了

【MySql】MySql事务常见操作

autocommit会影响之前的单sql,每条sql就相当于事务,虽然没有写begin,没有写commit。单sql执行的时候,如果autocommit是off的,只是事务执行中,当这个客户端崩溃的时候,数据会回滚。如果autocommit是on的,信息直接提交到数据库进行持久化。

单sql也是事务,是自动提交的。如果autocommit是off关闭的,当sql执行后再commit之后数据就是持久化了。

总结

结论

只要输入begin或者start transaction,事务便必须要通过commit提交,才会持久化,与是否设置set autocommit无关。

事务可以手动回滚,同时,当操作异常,MySQL会自动回滚

对于 InnoDB 每一条 SQL 语言都默认封装成事务,自动提交,除非把autocommit改成OFF。(select有特殊情况,因为MySQL 有 MVCC )

从上面的例子,我们能看到事务本身的原子性(回滚),持久性(commit)

事务操作注意事项

如果没有设置保存点,也可以回滚,只能回滚到事务的开始。直接使用 rollback(前提是事务还没有提交)
如果一个事务被提交了(commit),则不可以回退(rollback)
可以选择回退到哪个保存点
InnoDB 支持事务, MyISAM 不支持事务
开始事务可以使 start transaction 或者 begin,结束使用commit,建议使用begin,毕竟比较容易记住文章来源地址https://www.toymoban.com/news/detail-496773.html

到了这里,关于【MySql】MySql事务常见操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MYSQL】事务隔离级别

    脏读 一个事务正在对一条记录做修改,在这个事务完成并提交前,另一个事务也来读取同一条记录,读取了这些未提交的“脏”数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被形象的叫作’脏读’(Dirty Reads)。 例子:事务A修改了一条数据1状态

    2024年01月19日
    浏览(31)
  • Mysql 索引 、事务、隔离级别

    目录 索引(index) 1.为什么要有索引? 2.引入索引的代价 3.索引的操作 4.索引的使用场景 5.索引的底层原理 事务 (transaction) 事物的回滚是怎么做到的 事物的四大特性 并发执行事务带来的问题 隔离级别 索引是一种为了加快数据库查询(操作)速度而引入的一种手段,需要占用额

    2024年01月20日
    浏览(48)
  • 【MySql】MySql事务隔离级别与一致性

    MySQL服务可能会同时被多个客户端进程(线程)访问,访问的方式以事务方式进行 一个事务可能由多条SQL构成,也就意味着,任何一个事务,都有执行前,执行中,执行后的阶段。而所谓的原子性,其实就是让用户层,要么看到执行前,要么看到执行后。执行中出现问题,可以

    2024年02月10日
    浏览(31)
  • MySQL的事务特性、事务特性保证和事务隔离级别

            事务是指要么所有的操作都成功执行,要么所有的操作都不执行的一组数据库操作。 一、MySQL提供了四个事务特性,即ACID:          1. 原子性(Atomicity) :一个事务中的所有操作要么全部提交成功,要么全部回滚失败,保证事务的原子性。          2. 一

    2024年02月03日
    浏览(32)
  • 【MySQL】事务与隔离级别详解

    事务就是一组DML语句组成 ,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体(原子性)。例如买票操作,上层看来是一个单纯的买票操作,但是下层却需要一条或多条SQL语句来完成转账操作,这一组SQL是一个整体,被称为事务。事务还

    2024年02月15日
    浏览(35)
  • 【Mysql数据库 第13章】MySQL的事务、事务的隔离级别、事务的保存点

    💖Spring中的创建对象的三种方式、第三方资源配置管理详细描述及使用(XML版完结篇) 💖Spring中的bean的配置、作用范围、生命周期详细描述及使用(XML版上篇) 💖

    2023年04月20日
    浏览(48)
  • 【MySQL】事务隔离机制 -- 必须说透

    如何控制 并发 是数据库领域中非常重要的问题之一,MySQL为了解决并发带来的问题,设计了事务隔离机制、锁机制、MVCC机制等,用一整套机制来解决并发问题,本文主要介绍事务隔离机制。 事务transaction(简写tx),在数据库中,事务是指一组逻辑操作,这些操作要么全部执

    2024年02月15日
    浏览(28)
  • mysql不同隔离级别事务插入数据

    面试中问到了相关问题,做下问题记录 问题是这样的,数据库默认隔离级别下,事务A插入一条数据,没有提交,事务B插入一条数据,提交,表id为自增,如果表是空表,事务A和事务B的id分别是多少。 2.1.1 打开一个mysql窗口,事务A 执行代码块 2.1.2 打开另一个窗口,事务B 执

    2024年02月11日
    浏览(39)
  • 网络安全--mysql中事务锁以及事务隔离解析

    专一性和历史性,例如一个男人历史上是花心的,但当他成长后开启begin和update后变的专一了,多项事务也影响不到他了,直到水泥封心,只可被一个人查询在此我们进入正题: 一、我们建立docker下的mysql镜像创建表格如下并且开启多会话进行实验:    第一事务:  第二事

    2024年02月13日
    浏览(31)
  • MySQL_9 事务机制与隔离机制

    目录 一、事务概述         1.定义 :          2.事务和锁 :  二、事务操作         1.MySQL控制台事务的基本操作 :          2.代码演示 :          3.注意事项 :  三、事务的“ACID”特性 :  四、隔离机制         1.介绍 :          2.分类 :          3.常用指令 : 

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包