首页 > 数据库 >mysql事务

mysql事务

时间:2023-05-22 14:36:17浏览次数:32  
标签:回滚 log 事务 mysql 日志 执行 重做

(目录)

事务的特性

  • 原子性(Atomicity):语句要么全执行,要么全不执行,是事务最核心的特性,事务本身就是以原子性来定义的。实现主要基于undo log日志。

  • 持久性(Durability):保证事务提交后不会因为宕机等原因导致数据丢失。实现主要基于redo log日志。

  • 隔离性(Isolation):保证事务执行尽可能不受其他事务影响。InnoDB默认的隔离级别是RR,RR的实现主要基于锁机制、数据的隐藏列、undo log和类next-key lock机制。

  • 一致性(Consistency):事务追求的最终目标,一致性的实现既需要数据库层面的保障,也需要应用层面的保障。

事务基础语法

  • 在 MySQL 命令行的默认设置下,事务是自动提交的,即执行了SQL 语句之后会马上执行 commit 操 作,我们可以设置 set autocommit=0 来禁用当前回话的自动提交。
  • 还可以用 begin 、start transaction 来显式的开始一个事务。
  • commit 在默认设置下是等价于 commit work 的,表示提交事务。
  • rollback 在默认设置下等价于 rollback work,表示事务回滚。
  • savepoint xxx 表示定义一个保存点,在一个事务中可以有多个保存点。
  • release savepoint xxx 表示删除一个保存点,当没有该保存点的时候执行该语句,会抛出一个异常。
  • rollback to [savepoint] xxx 表示回滚到某个保存点。

查询事务自动提交状态

show variables like '%commit%';

image.png

事务自动提交修改方式:
--全局修改
set global autocommit=0;
--局部修改
set session autocommit=0;

事务的隔离性

image.png

MySQL 的默认隔离级别下,当一个事务还没有提交的时候,其他事务是无法感知到数据的变化的。

事务日志文件

重做日志 redo log ==>ib_logfile0  重新执行
回滚日志 undo log ==>ibdata       回滚数据

mysql对于事务的执行 =====> 日志先行    凡是sql执行都会执行事务
日志优先级大于实际操作的数据的 所有执行的sql都会先执行日志,在写数据

重做日志(redo log)

当我们在一个事务中尝试对数据进行写时,它会先将数据从磁盘读入内存,并更新内存中缓存的数据,然后生成一条重做日志并写入重做日志缓存,当事务真正 提交时,MySQL 会将重做日志缓存中的内容刷新到重做日志文件,再将内存中的数据更新到磁盘上

重做日志执行时间:
在mysql中事务执行commit提交了之后,但是服务器挂了,数据还没有写入磁盘,在mysql重启服务之后会
重新执行这个重做日志写入数据。

回滚日志(undo log)

所有事务进行的 修改都会先记录到这个回滚日志中,然后在对数据库中的对应行进行写入。 注意:系统发生崩溃、数据库进程直接被杀死后,当用户再次启动数据库进程时,还能够立刻通过查询回滚日志将之前未完成的事务进行

回滚日志执行时间:
1. 手动执行回滚命令时会执行
2. 如果程序在事务执行之后,提交命令执行之前出现了异常,在下次mysql服务重启的时候会执行
  • 回滚日志(undo log)实现的是事务的一致性以及原子性

  • 重做日志(redo log)实现的是事务的持久性

  • 事务的隔离性通过事务的锁来实现===>行级锁

标签:回滚,log,事务,mysql,日志,执行,重做
From: https://blog.51cto.com/u_14661954/6323805

相关文章

  • ACID数据库事务的四个特性
    ACID数据库事务的四个特性,这四个特性包括:原子性(Atomicity):事务是一个原子操作,要么全部执行成功提交,要么全部失败回滚。如果一个事务执行了一半,那么数据库会回滚所有已经完成的操作,以保证事务的原子性。一致性(Consistency):在事务开始和结束时,数据库必须保持一致性状态。事务执行......
  • MySQL数据库的一些常见问题
    博主介绍:–我是了凡微信公众号【了凡银河系】期待你的关注。未来大家一起加油啊~前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。下面记录一些关于MySQL一些常见的问题文章目录前言1.数据库三大范式2.MySQL存储引擎Mylsam和InnoDB有哪些......
  • 安装mysql服务遇到的问题
    找不到MSVCR120.dll,无继续法执行代码”官方链接MicrosoftVisualC++可再发行的最新下载mysqld:Can'tcreate/writetofile'Drowerdownload\mysql-5.7.19-winx64\mysql-5.7.19-winx64\data\is_writable'(Errcode:2-Nosuchfileordirectory)把my.ini移动到bin目录下......
  • rhel 7.3安装mysql 5.7.21
    文档课题:rhel7.3安装mysql5.7.21安装包:mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar1、上传安装包[root@leo-mysql5721~]#mkdir-p/u01/setup/dbsftp>lcdF:\installmedium\mysql\MySQL-5.7.21sftp>cd/u01/setup/dbsftp>putmysql-5.7.21-1.el7.x86_64.rpm-bundle......
  • Linux MySQL 修改数据和binlog文件目录
    概述系统:CentOS7.6MySQL数据库安装,默认数据库文件和binlog文件都在/var/lib/mysql目录下,若Linux系统安装时,未为根目录分配较大硬盘空间,很容易导致系统根目录硬盘空间不够用,从而导致MySQL服务或系统卡死或挂掉。故需要修改MySQL数据库文件和binlog文件目录。步骤1、停止MySQL服务roo......
  • MySQL 查询数据库表的数量
    MySQL查询数据库表的数量 1.获取指定数据库的表的数量SELECTCOUNT(*)TABLES,table_schemaFROMinformation_schema.TABLESGROUPBYtable_schema; 2.获取mysql下所有数据库表的数量SELECTCOUNT(*)TABLES,table_schemaFROMinformation_schema.TABLESWHEREtable_......
  • MySQL注入点写入WebShell的几种方式
    在工具化日益成熟的今天,手工注入的能力越来越被忽视了。当你掌握了一款工具的使用时,应更深入的去了解工具帮你做了什么,把工具所产生的影响控制在自己可控的范围内。比如:当面对一个MySQL注入点,通过使用SQLmap的--os-shell命令选项,便可轻松一键获取Webshell,但是非正常退出时,便会在网......
  • 为什么MySQL单表不能超过2000万行?
    摘要:MySQL一张表最多能存多少数据?本文分享自华为云社区《为什么MySQL单表不能超过2000万行?》,作者:GaussDB数据库。最近看到一篇《我说MySQL每张表最好不要超过2000万数据,面试官让我回去等通知》的文章,非常有趣。文中提到,他朋友在面试的过程中说,自己的工作就是把用户操作信息......
  • 批量执行mysql文件
    mysqldumpMysql数据备份恢复目录mysqldumpMysql数据备份恢复一、需求二、Java实现Mysql备份与恢复pom.xmlmainMysqlBackupsMysqlReductionConfPropresources执行一、需求实现Mysql数据库备份与恢复/***mysqldump命令*备份库*备份所有数据库:mysqldump-h主机IP......
  • 遇到的问题之"数据库编写SQL-》子查询中加入limit报错:This version of MySQL doesn't
    一、问题 >1235-ThisversionofMySQLdoesn'tyetsupport'LIMIT&IN/ALL/ANY/SOMEsubquery'二、原因/解决方案这个错误通常是由于MySQL版本太旧导致的。在旧版本的MySQL中,无法在子查询中使用LIMIT和IN/ALL/ANY/SOME子查询。您需要升级到MySQL的较新版本,以解决......