mysql 数据库面试题整理
Mysql 中 MyISAM 和 InnoDB 的区别
1、InnoDB 支持事务MyISAM 不支持
2、InnoDB 支持外键MyISAM 不支持
3、InnoDB 是聚集索引,MyISAM 是非聚集索引
4、InnoDB 不保存表的具体行数
5、InnoDB 最小的锁粒度是行锁,MyISAM是表锁
mysql中有就更新,没有就插入的方式有哪些?
在MySQL中,你可以使用以下几种方式来实现"有就更新,没有就插入"的操作,通常称为"Upsert":
INSERT…ON DUPLICATE KEY UPDATE:
使用INSERT INTO语句,如果在插入数据时出现唯一键冲突,就会执行UPDATE操作。
INSERT INTO your_table (column1, column2) VALUES (value1, value2)
ON DUPLICATE KEY UPDATE column1 = value1, column2 = value2;
这种方式要求表中存在唯一键或主键,以便判断是否存在重复记录。
REPLACE INTO:
使用REPLACE INTO语句,如果存在唯一键冲突,就会替换(删除旧记录并插入新记录)。
REPLACE INTO your_table (column1, column2) VALUES (value1, value2);
这种方式也要求表中存在唯一键或主键。
INSERT IGNORE:
使用INSERT IGNORE语句,如果存在唯一键冲突,会忽略错误并继续插入。
INSERT IGNORE INTO your_table (column1, column2) VALUES (value1, value2);
这种方式不会更新已存在的记录,也不会删除重复的记录。
ON DUPLICATE KEY UPDATE(多行插入):
如果你要一次性插入多行数据并在冲突时更新,可以使用INSERT INTO VALUES语句。
INSERT INTO your_table (column1, column2) VALUES (value1, value2), (value3, value4)
ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2);
这允许一次性插入多个记录并进行更新操作。
INSERT…SELECT…ON DUPLICATE KEY UPDATE:
可以使用INSERT INTO SELECT语句从另一个表中选择数据并进行插入/更新。
INSERT INTO your_table (column1, column2)
SELECT value1, value2 FROM another_table
ON DUPLICATE KEY UPDATE column1 = VALUES(column1), column2 = VALUES(column2);
这适用于将另一个表的数据插入到目标表中,如果存在冲突则进行更新。
mysql的事务隔离级别
1、READ UNCOMMITTED(读未提交):
最低的隔离级别。
允许一个事务读取另一个事务尚未提交的未提交数据。
可能导致脏读(读到未提交的数据)、不可重复读(同一查询返回不同结果)、幻读(同一查询返回不同的行)问题。
一般不建议使用,因为它会牺牲数据一致性和完整性。
2、READ COMMITTED(读已提交):
默认的隔离级别。
允许一个事务只能读取已经提交的数据,避免了脏读。
仍然可能遇到不可重复读和幻读问题,因为其他事务可以在事务执行期间提交新数据。
3、REPEATABLE READ(可重复读):
在一个事务内多次读取相同数据会返回相同结果。
防止了脏读、不可重复读,但仍然可能遇到幻读问题。
InnoDB存储引擎的默认隔离级别。
4、SERIALIZABLE(串行化):
最高的隔离级别。
确保事务之间没有脏读、不可重复读和幻读问题。
实际上通过对数据进行锁定来实现,可能导致并发性能下降。
适用于对数据完整性要求非常高的场景,但一般情况下使用较少。
mysql可重复读,查询会不会加锁,插入会不会加锁,加的什么锁?
在MySQL的可重复读(REPEATABLE READ)隔离级别下,查询和插入操作都会引入锁,但是加锁的类型和行为略有不同:
查询操作:
在可重复读隔离级别下,查询操作会引入共享锁(Shared Lock),也称为读锁。
共享锁允许多个事务同时读取相同的数据,但不允许其他事务对数据进行修改。
这意味着在可重复读隔离级别下,查询操作会阻止其他事务对查询的数据进行修改,确保了查询的一致性和可重复性。
插入操作:
插入操作会引入排他锁(Exclusive Lock),也称为写锁。
排他锁会阻止其他事务对插入操作涉及的数据行进行读取或写入。
这意味着在可重复读隔离级别下,插入操作会阻止其他事务对插入的数据行进行读取或修改,确保了插入操作的原子性。
需要注意的是,虽然查询会引入共享锁,但共享锁不会阻止其他事务对相同数据行的读取,因此允许多个事务同时读取相同的数据。但插入操作引入的排他锁会阻止其他事务对插入的数据行进行读取或写入,以确保插入操作的完整性。
这种行为是可重复读隔离级别下的默认行为,但也可以使用一些特定的SQL语句来显式控制锁的行为,例如使用FOR UPDATE或FOR SHARE子句来修改锁定行为
mysql 什么是大段锁,什么是小段锁
在MySQL中,"大段锁"和"小段锁"通常不是官方术语,但它们用来描述不同粒度的锁定行为。这些描述可能涉及到表级锁(“大段锁”)和行级锁(“小段锁”)之间的比较,或者可能涉及到一次性锁定大量数据(“大段锁”)和锁定较少数据量(“小段锁”)之间的比较。
以下是对这两个概念的简要解释:
-
大段锁:
- 大段锁通常指的是在事务中锁定较大数据范围的锁。这可能包括表级锁或跨越多行的锁定操作。
- 当一个事务锁定了大量数据时,其他事务可能会被阻塞,因为它们需要等待获取对同一数据范围的锁。
- 大段锁可能会降低并发性,因为它们限制了其他事务对数据的访问。
-
小段锁:
- 小段锁通常指的是在事务中锁定较小数据范围的锁。这可能包括只锁定少数行或单个行的锁定操作。
- 当一个事务只锁定少量数据时,其他事务可以继续访问未被锁定的数据,从而提高了并发性。
- 小段锁通常用于减少锁冲突和提高系统的并发性能。
在MySQL中,锁的粒度可以根据具体需求进行控制。例如,使用不同的隔离级别、锁定表级别或行级别等。通常,合理的锁定粒度取决于应用程序的并发需求和数据访问模式。选择适当的锁定粒度是优化数据库性能和避免锁定问题的关键因素。
相关文章:

mysql 数据库面试题整理
Mysql 中 MyISAM 和 InnoDB 的区别 1、InnoDB 支持事务MyISAM 不支持 2、InnoDB 支持外键MyISAM 不支持 3、InnoDB 是聚集索引,MyISAM 是非聚集索引 4、InnoDB 不保存表的具体行数 5、InnoDB 最小的锁粒度是行锁,MyISAM是表锁 mysql中有就更新…...

LeetCode-435-无重叠区间
题目链接: 力扣435 -无重叠区间 解题思路:和之前的合并区间、汇总区间都比较相似, 先对二维数组排序,按照左边界升序;当 当前区间的左区间 < 前一个区间的右区间,说明有重叠,res1,还要更新当…...

记录深度学习常用指令(一)
一、创建Conda虚拟Python环境 conda create -n [仓库名字] python[版本]二、激活环境 conda activate [仓库名字]三、安装PyTorch PyTorch官方 GPU: conda install pytorch1.11.0 torchvision0.12.0 torchaudio0.11.0 cudatoolkit11.3 -c pytorchCPU࿱…...

Shell脚本练习——系统应用相关
显示系统信息 [rootwenzi data]#cat systemInfo.sh #/bin/bash RED"\E[1;31m" GREEN"\E[1;32m" END"\E[0m" echo -e "$GREEN----------------------Host systeminfo--------------------$END" echo -e "HOSTNAME: $REDho…...

同创永益入选首批“金融数字韧性与混沌工程实践试点机构”
8月16日下午,由北京国家金融科技认证中心、北京国家金融标准化研究院联合主办的“传递信任 服务发展”金融科技标准认证生态大会在太原成功举办。中国金融电子化集团有限公司党委书记、董事长周逢民,中国科学院院士冯登国,中国工商银行首席技…...

Hive 表注释乱码解决
文章目录 出现原因MySQL 字符集修改调整元数据库字符集测试 出现原因 一般 Hive 的元数据信息都存储在 MySQL 中,但 MySQL 数据库中的 character_set_server 和 character_set_database 参数,默认都为 latin1 字符集,这两个参数决定了服务器…...

【搭建私人图床】使用LightPicture开源搭建图片管理系统并远程访问
文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进,功能也越来越多,而手机…...

Ubuntu入门04——目录与文件
目录 1.显示当前工作目录 2.更改目录 3.创建工作目录 4.删除工作目录 5.移动文件或者文件夹 6.文件夹and文件查看命令 7. 回到根目录,回到上一级 8.删除工作目录 9.查看目录和文件 10.以树状图列出目录内容 11.文件查找 12.在数据库中查找文件或目录 1…...

深度学习中有哪些超参数,都有什么作用
深度学习中有许多超参数需要设置,它们会对模型的性能和训练过程产生重要影响。以下是一些常见的超参数及其作用: 学习率(Learning Rate):控制参数更新的步长。较小的学习率可以使模型收敛更稳定,但可能需要…...

centOS下载与安装
1 下载centOS镜像 The CentOS Project 选择阿里云的镜像 2 下载虚拟机 Vmware workstation VMware - Delivering a Digital Foundation For Businesses 1 下载安装 centOs是一个操作系统,操作硬件的。所以需要有机器,可以使用虚拟机。 2 创建新的虚…...

uniapp中mixins的使用
mixins 是一个 js 对象,它可以包含我们组件中JS部分的任意功能选项,如:data、components、methods、created、computed 等等。我们只要将公用的功能以对象的方式传入 mixins 选项中,当组件使用 mixins 对象时所有 mixins 对象都将…...

【JAVA基础——JAVA虚拟机JVM】
JVM 文章目录 JVM一.JVM结构1.1.JVM包含两个子系统和两个组件1.2.运行时数据区1.2.1.简介1.2.2.程序计数器1.2.3.虚拟机栈1.2.4.堆1.2.5.本地方法栈1.2.6.方法区(永久代实现)java8-1.2.7.元空间(Metaspace)1.2.8.JVM字节码执行引擎1.2.9.直接内存(Direct Memory)1.2.10.垃圾收集…...

RTSP/Onvif视频服务器EasyNVR安防视频平台服务器频繁重启的问题解决方案
EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议,将前端接入设备的音视频资源进行采集,并转码成适合全平台、全终端分发的视频流格式,包括RTSP、RTMP、FLV、HLS、WebRTC等格式。平台可拓展性强、部署轻快,在安防监控领域有着广泛…...

SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)
服务端在定位错误的时候,有时候要还原现场,这就要把当时的所有入参参数都能记录下来,GET还好说,基本NGINX都会记录。但是POST的请求参数基本不会被记录,这就需要我们通过一些小技巧来记录这些参数,放入日志…...

快速掌握STM32工程创建
STM32 工程创建-- 使用Keil uVision5 软件 晓理紫 1 准备库函数库 STM32F10x_StdPeriph_Lib_V3.5.0 VX 搜索“晓丽紫”关注回复STM32F10x即可下载 2、创建一个目录用来存放工程 STM32Study STM32Study/study1 存放本次工程目录 3、打开Keil uVision5 创建工程 4、选择型号(根据…...

如何利用开源工具搭建AI大模型底座
开源社区是技术发展的一个重要部分,对于AI大模型来说,也是如此。 我们在这篇文章中来尝试通过开源工具来构建AI大模型的底座,涉及到的技术包括: LangchainOpenAIFlowiseLocalAILlama 使用Langchain构建第一个对话应用 如果你使…...

算法笔记:二叉树
1 基本二叉树 二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为“左子节点”和“右子节点”。 二叉树的根是唯一没有父节点的节点,而所有其他节点都有一个父节点和零个或两个子节点。 1.1 基础术语 节点(Node&…...

1. 安装Zookeeper
1.下载 点击下载Zookeeper 单机版安装 安装Zookeeper前需要先安装jdk上传安装包rz解压安装包:tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz -C /opt/app/zookeeper zookeeper目录结构:a. bin: 放置运行脚本和工具脚本b. conf: zookeeper 默认读取配置的目录,里面会有…...

warning: ignoring unsupported character ‘问题修复
rivers/net/wireless/aic8800/Kconfig:1⚠️ ignoring unsupported character 问题修复: 有一次编译内核,看到有下面的warning: jianjian:~/share/kylin/rk-kernel-5.10$ make menuconfigUPD scripts/kconfig/mconf-cfgHOSTCC scripts/…...

【Ant Design】Form.Item创建自定义表单
一、概述 Antd是一个非常强大的UI组件库,里面的Form表单组件也基本能满足我们大多数场景。但是也有需要自定义表单的场景。 Vue2里我们使用v-model,结合子组件的model属性,来实现自定义组件的双向绑定。 Vue3里我们使用v-model,…...

Vision Transformer(VIT 网络架构)
论文下载链接:https://arxiv.org/abs/2010.11929 文章目录 引言1. VIT与传统CNN的比较2. 为什么需要Transformer在图像任务中? 1. 深入Transformer1.1 Transformer的起源:NLP领域的突破1.2 Transformer的基本组成1.2.1 自注意机制 (Self-Atte…...

数学建模--蒙特卡洛模型的Python实现
目录 1.算法思想简介 2.算法应用1:问题一阐述 3.算法应用1:问题一解决 4.算法应用2:问题二阐述 5.算法应用2:问题二解决 1.算法思想简介 #蒙特卡洛算法思想 """ 蒙特卡洛方法的理论其实很类似于概率论中一个比较重…...

MySQL访问和配置
目录 1.使用MySQL自带的客户端工具访问 2.使用DOS访问(命令行窗口WinR → cmd) 3.连接工具(SQLyog或其它) MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 1.使用MySQL自…...

note_前端框架Vue的安装和简单入门(Windows 11)
1. Vue安装 (1) 下载安装node.js和npm # 下载msi安装包 https://nodejs.org/en# 点击安装包,按提示安装 # 默认安装nodejs, npm, 在线文档; PATH配置# 确认安装是否成功,在dos中输入 node -v # 验证nodejs是否安装成功 npm -v # 验证nodejs包管…...

SILERGY(矽力杰)功率电子开关 SY6280AAC
SILERGY(矽力杰)功率电子开关 SY6280AAC Low Loss Power Distribution Switch SOT-5 Pacakge 2.4V ~ 5.5V (<6V) 0.6W Max. Current 2A Reverse blocking (no body diode) Programmable current limit ( Ilimits(A) 6800 / Rset(ohm). ) Application Circuit (Reco…...

mysql char 和varchar的区别?
char 和varchar的区别 1、 char 一定会使用指定的空间,varchar是根据数据来定空间 2、 char的插入数据效率理论上比varchar高:varchar是需要通过后面的记录数来计算 使用哪一种类型? 如果确定数据一定是占指定长度,那么使用char类…...

HttpClient默认重试机制
分析&回答 只有发生IOExecetion时才会发生重试InterruptedIOException、UnknownHostException、ConnectException、SSLException,发生这4中异常不重试get方法可以重试3次,post方法在socket对应的输出流没有被write并flush成功时可以重试3次。读/写超…...

论文于祥读及复现——《Multi-level Map Construction for Dynamic Scenes》
论文祥读之——动态场景的多层次地图构建 0. 出发点(暨摘要)1. 引言2. 相关工作3.主要内容概括3.1 几何地图的构建3.1.1 密集点云地图和八叉图的构建3.1.2 平面地图的构建 3.2 对象地图的构建3.2.1 对象参数化和数据关联3.2.2 对象的更新与优化 4. 实验4…...

IDEA 报 Cannot resolve symbol ‘HttpServletResponse‘ 解决
springboot2版本换成springboot3之后,代码这里突然报红了, 首先要淡定,把原先Import的引入删掉,重新引入试试呢,是不是很简单哈哈。 原来,springboot3的路径是: import jakarta.servlet.http…...

linux-samba-window登不上
登不上查了很久发现是防火墙导致的 sudo firewall-cmd --list-all //查看所有的防火墙信息sudo firewall-cmd --permanent --zonepublic --add-servicesamba //service里添加sambafirewall-cmd --reload //重启 便可以登录了,小问题...