mysql面试题 Day5

1 什么是事务?

事务是指 多个数据库操作组成一个逻辑执行单元,满足ACID四个条件。

A是指原子性,事务保证操作要么全部完成,要么全部不完成,不会出现部分完成的情况;

C是指一致性,事务执行后,数据库从一个状态转移到另一个状态,数据完整性约束不变;

I是指隔离性,一个事务的执行不影响另外一个事务的执行;

D是指持久性,事务一旦提交,其对数据库的改变就应该是永久性的,即使发生系统故障或者断电等情况,修改也不会丢失。

一致性举例:

当一个银行客户从一个账户转账到另一个账户时,这涉及一个事务。事务的一致性保证了在转账过程中,无论是从账户A扣除的金额还是账户B增加的金额,最终的总金额应该保持不变,即转账前后账户总金额应该保持一致。如果在转账过程中出现错误或者中断,系统应该能够回滚事务,使得账户状态恢复到转账之前的一致状态,以避免任何账户金额不一致的情况发生。

持久性举例:

假设一个在线购物网站的订单处理系统。当用户下单并完成支付时,订单的相关信息(如订单详情、付款状态等)需要被保存到数据库中,以确保订单信息不会丢失或被意外删除。即使系统在订单提交后发生了断电或者其他故障,系统重新启动后,数据库应该能够恢复到之前提交订单时的状态,确保订单的支付状态和详情依然可用,而不会出现丢失订单或者支付状态不一致的情况。这种持久性保证了系统的可靠性和数据的完整性。

MySQL的 innodb引擎支持事务,myisam引擎不支持事务。

innodb引擎是通过MVCC来支持事务的。

2 说一说事务的隔离级别?

关键点:结构化回答,mysql的事务隔离级别是什么?为什么会有这个隔离级别呢,是要解决什么问题?

MySQL 的事务隔离级别有四个,分别是:

  1. READ UNCOMMITTED(未提交读):允许事务读取尚未提交的数据变更,可能会导致脏读、不可重复读和幻读问题。

  2. READ COMMITTED(提交读):保证一个事务提交后才能被其他事务读取,可以防止脏读,但是仍可能出现不可重复读和幻读问题。

  3. REPEATABLE READ(可重复读):确保在事务执行期间多次读取相同记录的结果是一致的,可以防止脏读和不可重复读,但仍可能有幻读问题。

  4. SERIALIZABLE(可串行化):通过强制事务串行执行来避免脏读、不可重复读和幻读,是最高的隔离级别,但性能较差。

这些隔离级别的存在是为了解决多个事务并发访问数据库时可能引发的数据一致性问题。不同的隔离级别提供了不同的数据访问保障,用户可以根据自己的应用需求和对数据一致性的要求选择合适的隔离级别。

常见的问题包括:

  • 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据。
  • 不可重复读(Non-repeatable Read):在一个事务内,两次读取同一行数据得到的结果不一致。
  • 幻读(Phantom Read):在一个事务内,两次查询同一个范围的数据集合得到的行数不一致。

不同的隔离级别通过不同的锁定策略或数据版本控制机制来解决这些问题,从而在保证数据并发访问性能的同时,尽可能地确保数据的一致性。

3 什么是MVCC?

MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于数据库管理系统的并发控制方法。它允许多个事务同时读取和写入数据,从而提高了数据库的并发性能。MVCC的核心思想是通过维护数据的多个版本,避免事务之间的冲突,提供快照隔离级别(Snapshot Isolation),实现高效的并发控制。

MVCC的原理

  1. 版本号

    • 每条记录在数据库中都有一个版本号,通常包括创建版本号和删除版本号。
    • 创建版本号标识记录被哪个事务创建。
    • 删除版本号标识记录被哪个事务删除。如果记录未被删除,则删除版本号为未定义。
  2. 快照

    • 每个事务在开始时,都会获得数据库的一个快照,即一个一致的视图。
    • 事务在读取数据时,总是从这个快照中读取数据,而不是读取当前的实际数据,这样可以避免读取到其他事务正在修改的数据。
  3. 读取数据

    • 读取操作会根据事务的开始时间和记录的版本号来确定可见性。
    • 事务只会看到在它开始之前已经提交的记录版本,不会看到其他未提交的修改。
  4. 写入数据

    • 写操作会创建数据的新版本,而不会覆盖原有版本。
    • 当一个事务对数据进行修改时,会生成一条新的记录版本,并标记该版本的创建时间为当前事务的ID。
    • 旧版本的数据会被保留,以供并发的其他事务读取。
  5. 回滚和提交

    • 如果事务提交,新的版本号会被记录为已提交状态。
    • 如果事务回滚,所有新版本的记录都会被丢弃。

MVCC的优点

  • 提高并发性:多个事务可以同时执行读写操作,不会因为锁定而阻塞。
  • 避免读写冲突:读操作不会被写操作阻塞,因为读操作可以读取快照数据。
  • 实现快照隔离:事务读取的数据是一致的快照,可以避免脏读、不可重复读等问题。

MVCC的缺点

  • 存储开销:由于需要维护多个版本的数据,会占用更多的存储空间。
  • 版本管理复杂:需要有效地管理和清理过期版本,以避免存储空间浪费。

4 介绍下 redo log, undo log, bin log

 1. r edo log 是 innodb 引擎产⽣的,主要⽤于⽀持MySQL事务,MySQL会先写 ⽽后在写 binlog 。 redo log 可以保证即使数据库异常重启,数据也不会丢失

2. u ndo log 是 redo log , innodb 引擎产⽣的,主要时候⽤于解决事务回滚和MVCC。数据修改的时 候,不仅记录 redo log ,也会记录 undo log 。在事务执⾏失败的时候,会使⽤ 进⾏回滚;

3. b inlog 主要⽤于复制和数据恢复,记录了写⼊性的操作。 和混合模式三种复制模式。

(扩展点1,阐述两阶段提交)

因为r edo log ⽣成到 undo log binlog 分成基于语句,基于⾏ binlog 写⼊之间有⼀个时间差,所以为了保证两者的⼀致性,MySQL引 ⼊了两阶段提交:

1. Prepare阶段,写⼊ redo log ;

2. Commit阶段,写⼊ binlog ,提交事务;

(扩展点2,阐述⼀下的刷盘时机)

1. b inlog 刷盘可以通过 sync_binlog 参数来控制。0-系统⾃由判断,1-commit刷盘,N-每 N个事务刷盘

2. r edo log 刷盘可以通过参数 innodb_flush_log_at_trx_commit 控制。0-写⼊ 每秒刷新到盘;1-每次提交;2-写⼊到 Reference 

5 mysql中都有哪些锁?介绍一下

锁机制,对于 innodb 来说,有多个维度:

1. 从独占性来说,有排他锁和共享锁;

2. 从锁粒度来说,有⾏锁和表锁;

3. 从意向来说,有排他意向锁和共享意向锁;

4. 从场景来说,还可以分为记录锁,间隙锁和临键锁;

MySQL锁总结 - 知乎 (zhihu.com)

Innodb中的事务隔离级别和锁的关系 - 美团技术团队 (meituan.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 定时器触发

c定时器&#xff0c;能够定时触发&#xff0c;即每隔一段固定时间执行一下函数 #include <iostream> #include <thread> #include <chrono> #include <signal.h> #include <time.h> #include <cstring> #include <glog/logging.h>#…

SQL Server解决Float字段使用ISNULL时报错

SQL Server解决Float字段使用ISNULL时报错 一、前言1.报错内容2.解决案例 一、前言 1.报错内容 > [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]从数据类型 varchar 转换为 float 时出错。 (8114)。这个错误通常是由于SQL Server在执行ISNULL函数时遇到…

防抖和节流使用场景

防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;是两种常用的性能优化技术&#xff0c;用于限制某些高频率执行的函数的调用次数&#xff0c;从而优化性能和用户体验。它们的主要区别在于控制函数执行频率的策略不同。 防抖&#xff08;Debounce…

Mini-L-CTF-2022 minispringboot Thymeleaf模板注入 spel的绕过

Mini-L-CTF-2022 minispringboot Thymeleaf模板注入 spel的绕过 就是一个低版本的Thymeleaf注入 漏洞点 public class MainController {GetMapping({"/{language}"})public String test(PathVariable(name "language") String language, RequestParam(…

codesys多段直线电机跨电机控制

1. 电机描述 在X轴上有多段直线电机&#xff0c;如下图有9个&#xff0c;从X1到X9. 2.codesys程序结构 程序名称&#xff1a;Pou_two_motors 动作名称&#xff1a;ACT_move 把这个程序搞到任务配置里面 通过ethercat总线命名一下这些电机&#xff0c;方便调用。 3.程序内容 P…

油烟监测仪:守护厨房,让蓝天白云成为常态

夏日炎炎&#xff0c;白天的酷暑让人们更加向往夜晚的凉爽与惬意。在这样的季节里&#xff0c;品尝各式烧烤、小龙虾&#xff0c;再搭配一杯冰镇啤酒&#xff0c;成为了许多市民夜晚消遣的不二选择。然而&#xff0c;随之而来的餐饮油烟问题也进入了高发阶段&#xff0c;对周边…

智能锁赛博化,凯迪仕携全球顶尖科技亮相建博会!

7月8日&#xff0c;作为大家居建材行业全球规模第一大展&#xff0c;2024中国建博会&#xff08;广州&#xff09;在广交会展馆正式拉开序幕。据官方数据显示&#xff0c;本届展会展出规模展览总规模近40万平方米&#xff0c;建筑装饰领域各细分题材的一线品牌几乎全部参展。 其…

构建安全稳定的应用:SpringSecurity实用指南

以下是关于构建安全稳定的应用&#xff1a;Spring Security 实用指南的详细介绍&#xff1a; 一、Spring Security 概述 Spring Security 是一个功能强大且高度可定制的安全框架&#xff0c;旨在为 Java 应用程序提供全面的安全解决方案。它涵盖了认证&#xff08;Authenticati…

循环练习题

思路&#xff1a; 代码&#xff1a; public static void main(String[] args) {double sum0;for (int i1;i<100;i){if (i%2!0){sum1.0/i;}else {sum-1.0/i;}}System.out.println(sum);} 结果为&#xff1a;

Java 方法中的参数:灵活应用与技巧

Java 方法的参数是在方法定义中声明的变量&#xff0c;用于接收调用者传递的数据。参数可以是基本数据类型&#xff08;如整数、浮点数&#xff09;、对象引用或者特定类型&#xff08;如数组、枚举&#xff09;。方法可以根据参数的类型和数量来执行不同的逻辑&#xff0c;通过…

vscode取消未使用变量的提示(爆红)

目前项目正在使用ts&#xff08;TypeScript&#xff09;&#xff0c;可以在 tsconfig.json 文件中调整编译选项 在你的项目中找到并打开 tsconfig.json 文件&#xff0c;将noUnusedLocals和noUnusedParameters设置为false&#xff0c;关闭vscode重新打开项目即可 {"comp…

Mysql 高性能索引

引言 索引是一种用于快速查询和检索数据的数据结构&#xff0c;其本质可以看成是一种排序好的数据结构。 常见的索引类型包括B-Tree索引、哈希索引、空间数据索引&#xff08;R-Tree&#xff09;、全文索引。 索引的类型 在MySQL中&#xff0c;索引是在 存储引擎层 而不是服…

js打印出堆栈

在JavaScript中&#xff0c;直接获取并打印完整的调用堆栈&#xff08;stack trace&#xff09;并不像在一些其他语言中那样直接。不过&#xff0c;有几种方法可以实现类似的功能&#xff0c;具体取决于你的需求和运行环境&#xff08;如浏览器环境或Node.js环境&#xff09;。…

井字游戏00

题目链接 井字游戏 题目描述 注意点 1 < board.length board[i].length < 100输入一定遵循井字棋规则 解答思路 如果某一方想要获胜&#xff0c;则其需要占满某一行或某一列或对角线&#xff0c;所以只需要根据第一行和第一列判断是否填充完某一行或某一列或对角线…

EHS管理体系,重塑造企业竞争力的关键密码

在当今这个快速发展的时代&#xff0c;企业面临着前所未有的挑战与机遇。随着全球环保意识的普遍觉醒&#xff0c;以及社会各界对企业社会责任的日益关注&#xff0c;EHS&#xff08;环境&#xff0c;健康&#xff0c;安全&#xff09;管理体系成为了企业稳健前行的重要基石。它…

设计模式之Facade设计模式

Facade设计模式&#xff0c;也称为外观模式&#xff0c;是一种结构型设计模式&#xff0c;它主要用于为子系统中的一组接口提供一个统一的高层接口&#xff0c;从而使得子系统更加容易使用。以下是关于Facade设计模式的详细介绍&#xff1a; 一、定义 Facade模式为多个复杂的…

一款强大且免费开源的多连接数据库管理工具

大家好&#xff0c;今天给大家分享一款免费开源的跨平台数据库管理工具DbGate。 DbGate是一款免费开源的跨平台数据库管理工具&#xff0c;支持多种数据库&#xff0c;包括MySQL、PostgreSQL、SQL Server、MongoDB、SQLite等。它可以在Windows、Linux、Mac操作系统上运行&#…

Python文本数据可视化之“词云”图

import numpy as np # numpy数据处理库 import wordcloud # 词云库 from PIL import Image # 图像处理库&#xff0c;用于读取背景图片 import matplotlib.pyplot as plt # 图像展示库&#xff0c;以便在notebook中显示图片 from openpyxl import load_workbook #读取词频Excel…

【概念介绍】Signed Distance Function(SDF)

三维空间的表示形式可以分为显式和隐式 显式&#xff1a; 体素Voxel&#xff0c;点云Point Cloud&#xff0c;三角面片Mesh隐式&#xff1a;符号距离函数Signed Distance Funciton(SDF)&#xff0c;占用场Occupancy Field&#xff0c;神经辐射场Neural Radiance Field&#xff…

MAC在网络结构中的位置:深入解析

MAC在网络结构中的位置&#xff1a;深入解析 在网络通信的世界里&#xff0c;每一层都扮演着至关重要的角色。今天&#xff0c;我们将聚焦于一个经常被提到但可能不太被理解的概念&#xff1a;MAC&#xff08;Media Access Control&#xff0c;媒体访问控制&#xff09;。我们…