mysql事务

文章目录

  • 前言
  • 一、ACID
    • 1.redo log
      • 1.分类
      • 2.如何保证持久性
      • 3.和二进制日志的对比
      • 4.恢复
    • 2.undo log
      • 2.1 作用
      • 2.2 是什么
      • 2.3 何时被删除
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、ACID

事务的四要素:ACID,自行百度。隔离性是由锁来控制的,可以参考它还有它。原子性和持久性是由redo log来实现的,可以参考。一致性由undo log来实现。redo 和 undo其实都是一种恢复操作,redo恢复事务修改的页操作,通常是物理日志,记录的是页的物理修改操作。undo回滚记录到某个特定的行,undo是逻辑日志,

1.redo log

1.分类

重做日志由两部分组成:

  1. 重做日志缓冲
  2. 重做日志文件

2.如何保证持久性

Innodb通过Force Log at Commit 机制来实现,即在事务提交时,必须先将该事务所有的日志写入到重做日志文件进行持久化,待事务的提交操作完成才算完成。那么,每次都要写磁盘不会很慢影响事务的提交性能吗?这个不会,因为redo log是顺序写的,是很快的。而由于在写入磁盘的过程中,其实都会先将内存中的数据写入到文件系统的缓存,一旦计算机宕机,则会丢失数据,因此为了保证不丢失数据,Innodb都会在事务提交时,调用一次fsync操作,将文件系统中的缓存刷新进磁盘,而fsync的效率取决于磁盘的性能,因此,磁盘的性能就决定了事务提交的性能。

3.和二进制日志的对比

二进制日志由msyql产生,和存储引擎无关,redo 和 undo 由innodb 产生。二进制日志主要作用是point-in-time恢复和主从复制环境搭建。
mysql中任何对于数据的更改都会产生二进制日志。二进制日志是逻辑日志,记录的就是 insert,update,delete语句。且只会在事务提交时,产生一次。而redo log会时刻产生,即便事务没有提交,可以看下master线程的工作方式。

4.恢复

innodb在mysql每次启动时,都会进行数据恢复。redo log中和页中记录的都有LSN,其实就是个序列号标识,当宕机时,checkpoint记录的LSN=1000,下次恢复时,就恢复大于1000之后的数据即可。
mysql事务_第1张图片

2.undo log

2.1 作用

undo log用来帮助回滚和MVCC的实现。mvcc的实现:当用户读取一条数据时,数据被其他事务占用,则当前事务可以通过undo log读取之前的行版本信息。

2.2 是什么

undo 数据存放在undo segment。undo 存放的是逻辑日志,例如原来事务是插入,undo就是一个相反的删除操作。undo log也要持久化,因此总伴随redo log 产生着。

2.3 何时被删除

事务提交后不能马上删除undo log,因为可能有其他事务需要通过undo log 来获取之前版本的数据,因此,是否删除由purge 线程来处理。

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

你可能感兴趣的:(mysql,mysql事务,mysql)