当前位置: 首页 > news >正文

【SQL】MySQL中的存储引擎、事务、锁、日志

存储引擎:

数据库管理系统(DBMS)使用数据存储引擎进行创建、查询、更新和删除数据。
MySQL5.5之前默认的存储引擎是MyISAM,5.5及之后版本默认的存储引擎是InnoDB。(my.ini中指定的)

  • MyISAM:不支持事务,不支持外键
  • InnoDB:支持事务,支持外键
  • 存储引擎是针对表来说的,可以通过alter改变表的存储引擎
  • InnoDB与MyISAM的最大区别是两点:InnoDB支持事务、支持行级锁

事务:

事务可以保证成批的SQL要么全部执行,要么全部不执行。
MySQL中只有InnoDB存储引擎才支持事务。
MySQL中默认是自动提交事务的,因此使用事务时要先禁止自动提交。

--禁止自动提交
set autocommit=0
--开启自动提交
set autocommit=1
--开启事务(可以使用begin或者start transaction)
begin
--执行多个SQL语句
update account set money = money-200 where id = 1
update account set money = money+200 where id = 2
--提交事务
commit--回滚事务
rollback

事务的特性ACID:

  • 原子性(Atomicity): 事务是一个整体,要么全部成功,要么全部失败。
  • 一致性(Consistency): 事务之前和事务之后的状态都是“正确”的(满足业务合理性)
  • 隔离性(Isolation): 并发执行的两个事务之间相互隔离,互不影响(即使操作同一条数据也不应该互相影响)
  • 持久性(Durability): 事务一旦被成功完成,数据被永久存储,不能回滚

事务的隔离级别:(越向下隔离级别越高)

  • 脏读: A事务读取到B事务没有提交的数据
  • 不可重复读: A事务提交之前,读取的同一个数据值发生变化(B事务提交导致)
  • 幻读: A事务提交之前和提交之后,同一个数据值发生变化(A事务提交之前读到的数据值不会变化,提交之后才能读到B事务提交修改的数据)
事务隔离级别解释脏读不可重复读幻读
读未提交(read-uncommitted)一个事务可以读取另一个事务未提交的数据
读已提交(read-committed)(Oracle默认)一个事务要等另一个事务提交后才能读取数据
可重复读(repeatable-read)(MySQL默认)事务开启后,不再允许修改操作,但可以读取数据
串行化(serializable)各事务串行化顺序执行,互不影响,效率很低,一般不用

隔离级别的设置:

-- 查看隔离级别
show variables like '%isolation%';
-- 设置隔离级别
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
set session transaction isolation level serializable;

锁:

  • 按数据操作粒度划分:
    表锁:锁定整个表
    行锁:锁定当前操作行
  • 按数据操作类型划分:
    读锁(共享锁):多个读操作可以同时进行互不影响,同一个表读锁可以加多个,加了读锁后只能读,自己和其他人均不能修改
    写锁(排他锁):当前操作没完成前,其他人既不能写也不能读,同一个表写锁只能加一个
存储引擎表级锁行级锁
MyISAM支持不支持
InnoDB支持支持

加表锁
MyISAM存储引擎使用表锁。
在查询语句(SELECT)前,自动给涉及的所有表加读锁。
在更新语句(UPDATE、DELETE、INSERT)前,自动给涉及的表加写锁。
一般不需要使用lock table命令给MyISAM表显式加锁。

-- 显式加表级读锁(共享锁)
lock table table_name read;
-- 显式加表级写锁(排他锁)
lock table table_name write;
-- 解锁
unlock tables;

加行锁
InnoDB默认使用行锁。
对于查询语句(SELECT)不会加任何锁。
对于更新语句(UPDATE、DELETE、INSERT),自动加排他锁,其他事务不能再修改该行数据,只有等当前事务commit后(释放排他锁),其他事务才能修改该行数据。

-- 显式加行级读锁(共享锁)
select * from table_name where ... lock in share mode;
-- 显式加行级写锁(排他锁)
select * from table_name where ... for update

日志:

  • 错误日志: 记录MySQL发生错误的信息,默认开启
-- 查看错误日志存放目录
show variables like 'log_error%';
  • 二进制日志: 记录了所有的DDL(Data Definition Language)语句和DML(Data Manipulation Language)语句,可以用于灾难时的数据恢复。MySQL8.0默认开启,低版本使用配置文件my.ini开启。
# 配置开启binlog日志,日志的文件前缀为mysqlbin
log_bin = mysqlbin
# 配置二进制日志的格式
binlog_format = STATEMENT
-- 查看是否开启binlog日志
show variables like 'log_bin';
-- 查看binlog日志格式
show variables like 'binlog_format';
二进制日志的格式特点
STATEMENT记录的都是SQL语句
ROW(MySQL8.0默认)记录每一行数据的变更
MIXED混合了STATEMENT和ROW
  • 查询日志: 记录了所有操作语句(相比二进制日志多了查询语句),默认不开启
# 配置开启查询日志,0关闭,1开启
general_log = 1
# 配置日志的文件名
general_log_file = file_name
-- 查看是否开启查询日志
show variables like 'general_log';
  • 慢查询日志: 记录执行时间超过参数long_query_time(默认10s)且扫描记录数不小于min_examined_row_limit(默认0)的所有SQL语句
# 配置开启慢查询日志,0关闭,1开启
slow_query_log = 1
# 配置慢查询日志的文件名
slow_query_log_file = slow_query.log
# 设置long_query_time时间
long_query_time = 10

相关文章:

【SQL】MySQL中的存储引擎、事务、锁、日志

存储引擎: 数据库管理系统(DBMS)使用数据存储引擎进行创建、查询、更新和删除数据。 MySQL5.5之前默认的存储引擎是MyISAM,5.5及之后版本默认的存储引擎是InnoDB。(my.ini中指定的) MyISAM:不支持事务,不支…...

DRM全解析 —— CRTC详解(2)

接前一篇文章:DRM全解析 —— CRTC详解(1) 本文继续对DRM中CRTC的核心结构struct drm_crtc的成员进行释义。 3. drm_crtc结构释义 (5)struct drm_modeset_lock mutex /*** @mutex:** This provides a read lock for the overall CRTC state (mode, dpms* state, ...) an…...

3d环形图开发(vue3+vite+ts)

开发效果&#xff08;待完善&#xff09;&#xff1a; 技术支持&#xff1a; Echarts echarts-gl 安装&#xff1a; 注&#xff1a;echarts与echarts-gl版本需对应&#xff0c;可参考官网 pnpm add echarts4.9.0 echarts-gl1.1.2 组件封装&#xff1a; <template><…...

element ui中父子组件共用一个el-dialog弹窗,切换组件页面弹窗进行关闭

在Element UI中&#xff0c;如果多个父子组件共用一个el-dialog弹窗&#xff0c;并且需要在切换组件页面时关闭弹窗&#xff0c;你可以考虑以下方法来实现&#xff1a; 使用Vuex进行状态管理&#xff1a; 在Vuex中创建一个状态来管理弹窗的显示状态&#xff08;例如&#xff0…...

基于Keil a51汇编 —— Segments, Modules, and Programs

段、模块和程序 在初始设计阶段&#xff0c;定义程序要执行的任务&#xff0c;然后划分为子程序。以下是与 Ax51 汇编器和 Lx51 链接器/定位器一起使用的子程序类型的简要介绍。 段是代码块或数据存储器。段可以是可重定位的&#xff0c;也可以是绝对的。可重定位段具有名称、…...

基于Java+SpringBoot+Vue民宿管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

【Qt】三种方式实现抽奖小游戏

简介 本文章是基本Qt与C实现一个抽奖小游戏&#xff0c;用到的知识点在此前发布的几篇文章。 下面是跳转链接&#xff1a; 【Qt控件之QLabel】用法及技巧链接&#xff1a; https://blog.csdn.net/MrHHHHHH/article/details/133691441?spm1001.2014.3001.5501 【Qt控件之QPus…...

【算法与数据结构】--算法基础--算法设计与分析

一、贪心算法 贪心算法是一种解决优化问题的算法设计方法&#xff0c;其核心思想是在每一步选择当前状态下的最优解&#xff0c;从而希望最终达到全局最优解。下面将介绍贪心算法的原理、实现步骤&#xff0c;并提供C#和Java的实现示例。 1.1 原理&#xff1a; 贪心算法的原…...

vue部分入门知识点代码示例

1. Vue实例 Vue.js的核心是Vue实例&#xff0c;用来管理你的应用。以下是一个创建Vue实例的示例&#xff1a; <!DOCTYPE html> <html> <head><title>Vue.js入门示例</title><!-- 引入Vue.js库 --><script src"https://cdn.jsdel…...

【图灵】Spring为什么要用三级缓存解决循环依赖问题

这里写自定义目录标题 一、什么是循环依赖二、什么是单例池&#xff1f;什么是一级缓存&#xff1f;三、什么是二级缓存&#xff0c;它的作用是什么&#xff1f;四、什么是三级缓存&#xff0c;它的作用是什么&#xff1f;五、为什么Spring一定要使用三级缓存来解决循环依赖六、…...

bert入门

bert是什么 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一种自然语言处理&#xff08;NLP&#xff09;中的预训练模型&#xff0c;它是基于Transformer架构的一种深度学习模型。BERT的主要目标是在大规模文本语料库上进行预训练&a…...

蓝桥杯基础---切面条

切面条 一根高筋拉面&#xff0c;中间切一刀&#xff0c;可以得到2根面条。 如果先对折1次&#xff0c;中间切一刀&#xff0c;可以得到3根面条。 如果连续对折2次&#xff0c;中间切一刀&#xff0c;可以得到5根面条。 那么&#xff0c;连续对折10次&#xff0c;中间切一刀…...

Spring Data Redis使用方式

1.导入Spring Data Redis的maven坐标 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2. 配置Redis数据源 2.1application.yml文件…...

HarmonyOS/OpenHarmony原生应用开发-华为Serverless认证服务说明(二)

一、支持HarmonyOS(Stage模型-API9)应用的账户注册登录方式 文档中的TS作者认为就是ArkTS之意。暂时支持四种模式&#xff0c;手机、邮箱、匿名、自有账户。 二、暂时不支持HarmonyOS(Stage模型-API9)应用的账户注册登录方式 包括华为账户注册登录&#xff0c;HarmonyOS…...

华为数通方向HCIP-DataCom H12-831题库(多选题:241-259)

第241题 设备产生的信息可以向多个方向输出信息,为了便于各个方向信息的输出控制,信息中心定义了10条信息通道,使通道之间独立输出,缺省情况下,以下哪些通道对应的输出方向可以接收Trap信息? A、console通道 B、logbuffer通道 C、snmpagent通道 D、trapbuffer通道 答案:…...

深度学习在 NumPy、TensorFlow 和 PyTorch 中实现所有损失函数

目录 一、说明 二、内容提示 三、均方误差 (MSE) 损失 3.1 NumPy 中的实现 3.2 在 TensorFlow 中的实现 3.3 在 PyTorch 中的实现 四、二元交叉熵损失 4.1 NumPy 中的实现 4.2 在 TensorFlow 中的实现 4.3 在 PyTorch 中的实现 五、加权二元交叉熵损失 5.1 分类交叉熵损失 5.2 …...

超低延时直播技术演进之路-进化篇

一、概述 网络基础设施升级、音视频传输技术迭代、WebRTC 开源等因素&#xff0c;驱动音视频服务时延逐渐降低&#xff0c;使超低延时直播技术成为炙手可热的研究方向。实时音视频业务在消费互联网领域蓬勃发展&#xff0c;并逐渐向产业互联网领域加速渗透。经历了行业第一轮的…...

相机坐标系之间的转换

一、坐标系之间的转换 一个有4个坐标系&#xff1a;图像坐标系、像素坐标系、相机坐标系、世界坐标系。 1.图像坐标系和像素坐标系之间的转换 图像坐标系和像素坐标系在同一个平面&#xff0c;利用平面坐标系之间的转换关系可以之知道两个坐标系变换的公式&#xff0c;并且该…...

jvm--对象实例化及直接内存

文章目录 1. 创建对象2. 对象内存布局3. 对象的访问定位4. 直接内存&#xff08;Direct Memory&#xff09; 1. 创建对象 创建对象的方式&#xff1a; new最常见的方式、Xxx 的静态方法&#xff08;单例模式&#xff09;&#xff0c;XxxBuilder/XxxFactory 的静态方法Class 的…...

【数据结构与算法】如何对快速排序进行细节优化以及实现非递归版本的快速排序?

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;国庆长假结束了&#xff0c;无论是工作还是学习都该回到正轨上来了&#xff0c;从今天开始恢复正常的更新频率&#xff0c;今天为大家带来的内容…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...