首页 > 数据库 >MySQL事务

MySQL事务

时间:2023-08-17 09:45:27浏览次数:33  
标签:语句 事务 数据库 START 提交 MySQL 隐式

ACID

原子性(Atomicity)

隔离性(Isolation)

一致性(consistency)

持久性(Durability)

当把现实世界的状态转换映射到数据库世界时,持久性意味着该转换对应的数据库操作所修改的数据都应该在磁盘上保留下来,不论之后发生了什么事故,本次转换造成的影响都不应该被丢失掉

事务 ​是一个概念,它对应着一个或者多个数据库的操作,事务分为以下几个状态:

  • 活动的

  • 部分提交

  • 失败的

  • 中止的

  • 提交的

image

MySQL中事务的语法

事务的本质其实只是一系列数据库操作,只不过这些数据库操作符合ACID特性而已

开启事务

  • BEGIN [work];

  • START TRANSACTION; 开启事务

    • READ ONLY 只读事务,只能读而不能写操作,如:START TRANSACTION READ ONLY;

    • WITH CONSISTANT SNAPSHOT 开启一致性读

    • 开启一个读写事务

      START TRANSACTION READ WRITE, WITH CONSISTENT SNAPSHOT

提交事务

  • COMMIT;

手动中止事务

  • ROLLBACK;

支持事务的存储引擎

目前只有InnoDBNDB存储引擎支持

自动提交

MySQL中有一个系统变量autocommit

mysql> SHOW VARIABLES LIKE 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.01 sec)

SET autocommit = OFF;  -- 将事务设置成不可自动提交

隐式提交

当我们使用START TRANSACTION或者BEGIN语句开启了一个事务,或者把系统变量autocommit的值设置为OFF时,事务就不会进行自动提交,但是如果我们输入了某些语句之后就会悄悄的提交掉,就像我们输入了COMMIT语句了一样,这种因为某些特殊的语句而导致事务提交的情况称为隐式提交,这些会导致事务隐式提交的语句包括:

  • 当定义或者修改数据库的定义语言:DDL(Data Definition Language)

    所谓的数据库对象,指的就是数据库视图存储过程等等这些东西。当我们使用CREATEALTERDROP等语句去修改这些所谓的数据库对象时,就会隐式的提交前边语

  • 隐式使用或修改**mysql**数据库中的表当我们使用ALTER USERCREATE USERDROP USERGRANTRENAME USERREVOKESET PASSWORD等语句时也会隐式的提交前边语句所属于的事务。

  • 事务控制或关于锁定的语句当我们在一个事务还没提交或者回滚时就又使用START TRANSACTION或者BEGIN语句开启了另一个事务时,会隐式的提交上一个事务,比如这样:

  • 加载数据的语句比如我们使用LOAD DATA语句来批量往数据库中导入数据时,也会隐式的提交前边语句所属的事务。

  • 关于**MySQL**复制的一些语句使用START SLAVESTOP SLAVERESET SLAVECHANGE MASTER TO等语句时也会隐式的提交前边语句所属的事务。

  • 其它的一些语句使用ANALYZE TABLECACHE INDEXCHECK TABLEFLUSHLOAD INDEX INTO CACHEOPTIMIZE TABLEREPAIR TABLERESET等语句也会隐式的提交前边语句所属的事务。

保存点

可以不用ROLLBACK回滚之前所有已经执行的sql,只需要会滚到savepoint保存点上即可

SAVEPOINT 保存点名称;

当使用的时候:

ROLLBACK [WORK] TO [SAVEPOINT] 保存点名称;

删除保存点:

RELEASE SAVEPOINT 保存点名称;

标签:语句,事务,数据库,START,提交,MySQL,隐式
From: https://www.cnblogs.com/smallwolf/p/17636768.html

相关文章

  • 为什么 MySQL 选择 B+树做索引?
    提到MySQL索引,相信使用过的小伙伴并不陌生,日常工作中,我们经常会加索引来提升查询效率,那么,为什么一个慢查询加上索引查询速度就能提升一个档次?索引后面的实现机制到底是什么?今天就让我们一起来探讨这个话题。申明:本文说的磁盘是指普通的机械磁盘一、索引是什么比如阅读时,索引......
  • java Sping aop 以及Spring aop 的应用事务管理
    1.回顾线程死锁概念和如何避免死锁的发生:线程的通信waitnotify()notify():---Object类线程的状态:NEW--->start()--->就绪状态---CPU时间片---运行状态RUNNABLE]--->sleep()--->TIMED_WAITING--->wait()---->WAITING----sysn---Blocked---->终止状态[T]线程池:常见......
  • mysql-综合案例,练习数据表查询操作
    1.环境搭建创建数据库test1createdatabaseifnotexiststest1; 选择test1数据库创建两张表dept(部门表)和employee(员工表)createtableifnotexistsdept(d_nointprimarykeyauto_incrementcomment"部门编号(自增长主键)",d_namevarchar(10)comment"部......
  • mysql-学习笔记
    --根据需求创建表(设计合理的数据类型、长度)--设计一张员工信息表,要求如下:--1.编号(纯数字)--2.员工工号(字符串类型,长度不超过10位)--3.员工姓名(字符串类型,长度不超过10位)--4.性别(男/女,存储一个汉字)--5.年龄(正常人年龄,不可能存储负数)--6.身份证号(二代身份证号均为18位,身份证中......
  • Mysql安装
    一、准备工作1、下载MySQL从官网地址下载Mysql二、环境检查1、检查是否安装过MySQLrpm-qa|grepmyqlmysql-community-common-5.6.30-2.el7.x86_64mysql-community-release-el7-5.noarchmysql-community-libs-5.6.30-2.el7.x86_64mysql-community-server-5.6.30-2.el7......
  • SQL注入-mysql绕过函数注入
    1.判断注入点通过测试发现,这里过滤了空格和等于号。所以咱们用/**/代替空格,用like代替=,最后将构造的语句进行url编码,使用的是小葵转化工具。所以咱们构造如下语句。//and//1//like//1结果如下图,页面正常显示。接着咱们再构造如下语句。/**/and/**/1/**/like/**/2发现页面报错,说明存......
  • 如何调整MySQL InnoDB缓冲池大小?如何监控缓冲池效率?常用的warm-up策略有哪些?
    如何调整MySQLInnoDB缓冲池大小?调整InnoDB缓冲池是优化InnoDB性能的关键步骤。InnoDB缓冲池是InnoDB存储引擎在内存中缓存数据和索引的地方,适当地调整它可以大大提高数据库的性能。以下是调整InnoDB缓冲池的步骤和建议:确定合适的大小:InnoDB缓冲池应该设置......
  • MySQL---索引优化与查询优化(子查询优化)
    索引优化与查询优化子查询优化示例:优化后排序优化注意:1、orderby且不使用limit且数据量比较大时,如果select内容和索引字段不匹配,将会进行回表,优化器将不会使用索引,索引失效;......
  • 一个十分简单的增删改查系统(含MYSQL数据库安装教程)
    一个十分简单的增删改查系统(nodejs+vue)该系统采用前后端分离的方式,实现最基本的增、删、改、查功能。前端使用vue框架搭建,后端使用nodejs,数据库用mysql1.准备工作1.1安装nodejs下载nodejs,官网如下Node.js(nodejs.org)选择长期维护版,下载之后直接下一步下一步就行了......
  • 在core项目下通过Dapper对mysql执行批量操作 报at MySql.Data.MySqlClient.MySqlComma
     在core项目下通过Dapper对mysql执行批量操作一直报异常  报PushService=>UpdateKeyWordProductCountTask=>错误信息:Fatalerrorencounteredduringcommandexecution.;;;堆栈信息:atMySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehaviorbehavior)at......