返回顶部
首页 > 资讯 > 数据库 >Mysql中的隐式COMMIT以及Savepoints的作用
  • 585
分享到

Mysql中的隐式COMMIT以及Savepoints的作用

摘要

    Mysql默认是自动提交的,如果要开启使用事务,首先要关闭自动提交后START TRANSACTioN 或者 BEGIN 来开始一个事务,使用ROLLBACK/COMMIT来结束一个事务。但即使如此,也并不是所有的操作都能被ROLL

Mysql中的隐式COMMIT以及Savepoints的作用[数据库教程]

    Mysql默认是自动提交的,如果要开启使用事务,首先要关闭自动提交后START TRANSACTioN 或者 BEGIN 来开始一个事务,使用ROLLBACK/COMMIT来结束一个事务。但即使如此,也并不是所有的操作都能被ROLLBACK,以下语句在执行后会导致回滚失效,比如DDL语句创建一个数据库,而且不止此,这样的语句包括以下这些等:

 

ALTER FUNCTION, ALTER PROCEDURE, ALTER TABLE, BEGIN, CREATE DATABASE, CREATE FUNCTION, CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, DROP DATABASE, DROP FUNCTION, DROP INDEX, DROP PROCEDURE, DROP TABLE, LOAD MASTER DATA, LOCK TABLES, RENAME TABLE, SET AUTOCOMMIT=1, START TRANSACTION, TRUNCATE TABLE, UNLOCK TABLESCREATE TABLE, CREATE DATABASE DROP DATABASE, TRUNCATE TABLE, ALTER FUNCTION, ALTER PROCEDURE, CREATE FUNCTION, CREATE PROCEDURE, DROP FUNCTIONDROP PROCEDURE...

    这些语句(以及同义词)均隐含地结束一个事务,即在执行本语句前,它已经隐式进行了一个COMMIT。InnoDB中的CREATE TABLE语句被作为一个单一事务进行处理。所以ROLLBACK不会撤销用户在事务处理过程中操作的CREATE TABLE语句。另外上面的语句中包括START TRANSACTION,这即是说明事务不能被嵌套。事物嵌套会隐式进行COMMIT,即一个事务开始前即会把前面的事务默认进行提交。

 

    在这个页面 https://blog.csdn.net/qingsong3333/article/details/77018567 上看到这个例子,如下图:

技术分享图片

 

 

技术分享图片

看图上说:是因为CREATE语句已经隐式地commit了。之后的语句都是自动提交的。我就感觉这里有问题,自己试了一下,果真是有问题,如下命令:

 

#执行sql命令
set autocommit=0;
start transaction;
	create table teachers(id int  AUTO_INCREMENT, tname varchar(50), PRIMARY KEY (id) ); 
	INSERT INTO students(username) VALUES(‘lisi‘);
rollback;

#执行结果:
[SQL]set autocommit=0;
受影响的行: 0
时间: 0.001s
[SQL]
start transaction;
受影响的行: 0
时间: 0.000s
[SQL]
	create table teachers(id int  AUTO_INCREMENT, tname varchar(50), PRIMARY KEY (id) );
受影响的行: 0
时间: 0.171s
[SQL] 
	INSERT INTO students(username) VALUES(‘lisi‘);
受影响的行: 1
时间: 0.001s
[SQL]
rollback;
受影响的行: 0
时间: 0.126s

 

    上面的在执行过程中,ROLLBACK虽然不能撤回create table语句,但是数据插入行是会回滚的(表students数据未增加,但自增字段会增加1)。真不知道它的结论是怎么来的,误导人啊,真捉急!!真捉急!!

总之关于START TRANSACTION 和autocommit,
1.不管autocommit 是1还是0,START TRANSACTION 后,只有当commit数据才会生效,ROLLBACK后就会回滚(不能回滚的DDL语句等除外)。
2.当autocommit 为 0 时,不管有没有START TRANSACTION。只有当commit数据才会生效,ROLLBACK后就会回滚。
3.如果autocommit 为1,并且没有START TRANSACTION。调用ROLLBACK是没有用的。即便设置了SAVEPOINT。

    上面谈到了设置SAVEPOINT, savepoint正如其字面意思,保存点,在事务中可以设定保存点,回滚的时候可以自由定义回滚至某个保存点,而不用一定要回滚到事务开始的时候的数据状态,官方介绍:保存点(savepoint)是事务过程中的一个逻辑点,用于取消部分事务,当结束事务时,会自动的删除该事务中所定义的所有保存点。当执行rollback时,通过指定保存点可以回退到指定的点。如下示例一看便懂。

 

set autocommit = 0;
start transaction;
	INSERT INTO students(username) VALUES(‘haha‘);
	SAVEPOINT tempa;
	INSERT INTO students(username) VALUES(‘haha_2‘);
	ROLLBACK TO SAVEPOINT tempa;
    #此处使用不使用RELEASE都可以,会自动删除
	RELEASE SAVEPOINT tempa;
COMMIT;

mysql中的隐式COMMIT以及Savepoints的作用

原文:Https://www.cnblogs.com/xiami2046/p/13180933.html

您可能感兴趣的文档:

--结束END--

本文标题: Mysql中的隐式COMMIT以及Savepoints的作用

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

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

猜你喜欢
  • Mysql中的隐式COMMIT以及Savepoints的作用
        Mysql默认是自动提交的,如果要开启使用事务,首先要关闭自动提交后START TRANSACTION 或者 BEGIN 来开始一个事务,使用ROLLBACK/COMMIT来结束一个事务。但即使如此,也并不是所有的操作都能被ROLL...
    99+
    2020-07-06
    Mysql中的隐式COMMIT以及Savepoints的作用 数据库入门 数据库基础教程
  • Docker镜像的commit操作示例及作用
    目录Docker 镜像是什么 UnionFS(联合文件系统)Docker 镜像加载原理分层的镜像Docker 镜像 commit 操作docker commit ...
    99+
    2024-04-02
  • MySQL中隐式转换的踩坑记录以及解决方法分享
    目录复现当时的情景根源所在隐式转换的规则避免进行隐式转换本来是一个平静而美好的下午,其他部门的同事要一份数据报表临时汇报使用,因为系统目前没有这个维度的功能,所以需要写个SQL马上出一下,一个同事接到这个任务,于是开始在...
    99+
    2024-04-02
  • Docker镜像提交命令commit的工作原理以及使用方法
    这篇文章主要讲解了“Docker镜像提交命令commit的工作原理以及使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker镜像提交命令commit的工作原理以及使用方法”吧!在...
    99+
    2023-06-04
  • MySQL的安装,以及VScode中MySQL的使用
           最近在新课学习python,到了数据库的安装和使用,其中遇到了一些困难,特别是在VScode上使用MySQL时,遇到了一些难处,特此纪录与分享一下。 MySQL简介         MySQL 是一个关系型数据库管理系统,由瑞...
    99+
    2023-08-31
    mysql 数据库
  • 隐式类型转换在编程中的作用及其重要性
    隐式类型转换的作用及其重要性 隐式类型转换(Implicit Type Conversion)是计算机编程中的一种常见操作,它使得不同类型的数据在运算、赋值、传参等操作中能够自动地转换为另一种类型。隐式类型转换的目的是为了方便和...
    99+
    2024-01-15
  • mysql中“UUID();”的用法以及用处
            今天在sql语句学习中,看到了UUID();的语句, 查询学习后,做出记录。         在SQL语句中,使用SELECT UUID()语句可以获取一个随机生成的UUID(Universally Unique Iden...
    99+
    2023-10-11
    mysql 数据库
  • java中synchronized的原理以及作用
    本篇内容介绍了“java中synchronized的原理以及作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题(1)synchroniz...
    99+
    2023-06-20
  • python中__init__的意义以及作用
    目录python 中 __init__的用法和含义补充:Python类中__init__()的作用python 中 __init__的用法和含义 python 中 __init__ ...
    99+
    2023-02-27
    python __init__用法 python __init__用法
  • 谈谈MySQL中的隐式转换
    工作过程中会遇到比较多关于隐式转换的案例,隐式转换除了会导致慢查询,还会导致数据不准。本文通过几个生产中遇到的案例来。 基础知识 关于比较运算的原则,MySQL官方文档的描述: https://dev.mysql.c...
    99+
    2022-05-25
    MySQL 转换 MySQL 隐式转换
  • Java中的反射的作用以及详解
    目录 目录 1.反射是什么? 2.反射的优缺点: 3.反射的应用场景: 4.反射创建的三种方式 : 5.反射的常用方法代码示例: 1.实体类(反射获取的类): 2.反射常用方法的示例代码: 1.反射是什么? Java中的反射是指在运行...
    99+
    2023-10-24
    java 开发语言
  • Scala隐式转换和隐式参数的作用是什么
    这篇文章主要讲解了“Scala隐式转换和隐式参数的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scala隐式转换和隐式参数的作用是什么”吧!5.1. 概念隐式转换和隐式...
    99+
    2023-06-02
  • C# 中使用隐式和显式操作符的示例
    目录什么是显式,什么是隐式创建 DTO 类Model 和 DTO 之间的相互转换使用隐式操作符使用显式操作符C# 有一个鲜为人知的特性是通过定义 显式和隐式操作符 实现类型之间的转换...
    99+
    2024-04-02
  • MyBatis的特点以及作用
    这篇文章主要讲解了“MyBatis的特点以及作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MyBatis的特点以及作用”吧!MyBatis特点?  1....
    99+
    2024-04-02
  • MySQL中concat以及group_concat的使用示例
    这篇文章给大家分享的是有关MySQL中concat以及group_concat的使用示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。本文中使用的例子均在下面的数据库表tt2下执...
    99+
    2024-04-02
  • MySQL中OPTIMIZE TABLE的作用及使用
    来看看手册中关于 OPTIMIZE 的描述: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_...
    99+
    2024-04-02
  • MySQL中索引的定义以及操作新手教程
    目录索引的定义索引的类型普通、唯一、主键和全文索引普通索引(INDEX)唯一索引(UNIQUE INDEX)主键索引(PRIMARY KEY)全文索引(FULLTEXT)单列索引和组合索引聚集索引和非聚集索引索引的创建原...
    99+
    2024-04-02
  • MySQL中隐式转换的示例分析
    这篇文章主要介绍MySQL中隐式转换的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、问题描述root@mysqldb 22:12:  [xu...
    99+
    2024-04-02
  • Mysql查询正在执行的事务以及等待锁的操作方式
    使用navicat测试学习: 首先使用set autocommit = 0;(取消自动提交,则当执行语句commit或者rollback执行提交事务或者回滚) 在打开一个执行update 查...
    99+
    2024-04-02
  • Atlassian中JIRA5.0.5的本质以及作用是什么
    Atlassian中JIRA5.0.5的本质以及作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Atlassian JIRA 5.0.5 发布了,该版本...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作