首页 > 数据库 >【数据库】事务与锁

【数据库】事务与锁

时间:2023-06-15 16:02:34浏览次数:36  
标签:autocommit 事务 transaction ROLLBACK 数据库 session statement COMMIT

参考: https://dev.mysql.com/doc/refman/8.0/en/innodb-autocommit-commit-rollback.html

 

autocommit, Commit, and Rollback
In InnoDB, all user activity occurs inside a transaction. If autocommit mode is enabled, each SQL statement forms a single transaction on its own.

By default, MySQL starts the session for each new connection with autocommit enabled, so MySQL does a commit after each SQL statement if that statement did not return an error. If a statement returns an error, the commit or rollback behavior depends on the error. 

A session that has autocommit enabled can perform a multiple-statement transaction by starting it with an explicit START TRANSACTION or BEGIN statement and ending it with a COMMIT or ROLLBACK statement. See Section 13.3.1, “START TRANSACTION, COMMIT, and ROLLBACK Statements”.

If autocommit mode is disabled within a session with SET autocommit = 0, the session always has a transaction open. A COMMIT or ROLLBACK statement ends the current transaction and a new one starts.

If a session that has autocommit disabled ends without explicitly committing the final transaction, MySQL rolls back that transaction.

Some statements implicitly end a transaction, as if you had done a COMMIT before executing the statement. For details, see Section 13.3.3, “Statements That Cause an Implicit Commit”.

A COMMIT means that the changes made in the current transaction are made permanent and become visible to other sessions. A ROLLBACK statement, on the other hand, cancels all modifications made by the current transaction. Both COMMIT and ROLLBACK release all InnoDB locks that were set during the current transaction.

 

SQL 行锁类型 说明

INSERT ... 排他锁 自动加锁
UPDATE ... 排他锁 自动加锁
DELETE ... 排他锁 自动加锁
SELECT(正常) 不加任何锁
SELECT ... LOCK IN SHARE MODE 共享锁 需要手动在SELECT之后加LOCK IN SHARE MODE
SELECT ... FOR UPDATE 排他锁 需要手动在SELECT之后加FOR UPDATE

标签:autocommit,事务,transaction,ROLLBACK,数据库,session,statement,COMMIT
From: https://www.cnblogs.com/clarino/p/17483134.html

相关文章

  • 解决mysql数据库 ‘ MySQL server has gone away’
    参考:https://www.jianshu.com/p/8c8086c11cae原因:查询的结果集超过max_allowed_packet查看执行SQL执行文件大小是否超过max_allowed_packet,如果超过则需要调整参数,或者优化语句。解决:修改参数,max_allowed_packet,比如调整为28M。要大于执行的SQL文件大小setglobalmax_a......
  • AntDB数据库荣获2023年中国信创产业拳头奖“2023年中国信创数据库卓越品牌”
    近日,由全球新经济产业第三方数据挖掘和分析机构iiMediaResearch(艾媒咨询)主办的“2023年(第2届)中国信创产业大会”在广州圆满落幕。大会现场揭晓了“2023年中国信创产业拳头奖”。AntDB数据库从众多参评产品中脱颖而出,荣获“2023年中国信创产业拳头奖”,被授予“2023年中国信创数据库......
  • DBeaver Ultimate Edtion 23.1 Multilingual (macOS, Linux, Windows) - 通用数据库工
    DBeaverUltimateEdtion23.1Multilingual(macOS,Linux,Windows)-通用数据库工具,现已集成ChatGPTOnetoolforalldatasources请访问原文链接:https://sysin.org/blog/dbeaver-23/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org通用数据库工具DBeaver是......
  • 016 数据库学习笔记--序列
    序列:获取唯一值,序列不支持事务回滚,会出现跳号SQLServer序列是一种逐步增加的命名的唯一的索引,它可以将一个整数标示符与一个数据行关联起来,并可保证该索引特别唯一。凭借这一特性,序列对于对数据进行安全且按照某种有意义的排序进行保存的场景非常有用。序列是一种用户定义的架......
  • mysql和neo4j集成多数据源和事务
    在微服务大行其道的今天,按理说不应该有多数据源这种问题(嗯,主从库算是一个多数据源的很常见的场景。),但是也没人规定不能这样做。就算有人规定的,曾经被奉为圭臬的数据库三大范式现在被宽表冲得七零八落,在很多场景下,其实是鼓励建立冗余字段的。话说项目中需要用到图数据库,我们选用......
  • 在数据库开发和测试期间安全地删除克隆和图像
    在这里,我提供了一个PowerShell脚本,您可以使用它来安全地删除所有克隆,然后准备好父图像,以便使用最新版本的数据库刷新所有开发和测试实例。至于回滚过程,此脚本旨在管理删除过程,以确保工作不会丢失。通过将删除脚本与安装脚本相结合,您可以在更新映像时刷新所有克隆,以反映原始数据库中......
  • 数据库与Redgate SQL Toolbelt和Azure DevOps的持续集成
    理论与实践中的数据库CICI背后的理论是,如果我们每天多次将代码集成到共享存储库中,然后通过运行自动构建和后续测试来验证每个提交,那么我们会及早发现并根除问题,并提高软件的质量。本文的内容是关于设置管道,使您能够将CI理论付诸实践,用于数据库。当我在2013年发布关于这个主题的原始......
  • .NET中SQL数据库的GraphQL API
    您可能已经阅读了大量关于GraphQL的文章,并且已经了解了这种API技术的所有优缺点,作为RESTAPI的替代方案。但是,让我们不久回顾一下GraphQL是什么,它的主要目的,以及我们如何在现实生活中使用它。关于GraphQL的简短信息GraphQL于2015年由Facebook发布,定位为着名的RESTful架构风格的替代......
  • 数据库连接池-Druid的使用
       packagedruid;/**druid数据连接池**/importcom.alibaba.druid.pool.DruidDataSourceFactory;importjavax.sql.DataSource;importjava.io.FileInputStream;importjava.io.FileReader;importjava.sql.Connection;importjava.util.Properties;p......
  • 解惑 spring 嵌套事务
    解惑spring嵌套事务/***@author王政*@date2006-11-24*/在所有使用spring的应用中,声明式事务管理可能是使用率最高的功能了,但是,从我观察到的情况看,绝大多数人并不能深刻理解事务声明中不同事务传播属性配置的的含义,让我们来看一下Trans......