为什么mysql更改表结构时,varchar超过255会锁表
在 MySQL 中,当修改表结构并将 VARCHAR 字段的长度设置为超过 255 时,可能会出现锁表的情况。这与 MySQL 的存储引擎(主要是 InnoDB)以及表的底层存储方式相关。
原因分析
-
行格式变化
InnoDB 存储引擎支持多种行格式(如COMPACT、REDUNDANT、DYNAMIC、COMPRESSED)。- 当
VARCHAR的长度从 255 扩展到更大时,可能会导致行格式发生变化(例如字段从固定长度变为动态长度存储),进而需要重建整个表。 - 特别是在某些情况下,
VARCHAR的长度超过 255 时,存储方式会从ROW 中直接存储变为外部溢出存储(特别是长字符串),导致表结构调整需要重新写入数据。
- 当
-
页分裂和数据重排
- 数据页的结构可能需要调整以容纳更大的
VARCHAR字段。 - 超过 255 的
VARCHAR可能需要额外的存储空间,而这些调整通常需要对整个表进行重新组织。
- 数据页的结构可能需要调整以容纳更大的
-
表定义变更导致表重建
MySQL 在大多数情况下会选择直接重建表来实现字段类型或长度的调整(ALGORITHM=INPLACE可能不起作用)。在重建表期间,MySQL 会获取表级锁,阻止其他线程对表的读写操作,导致锁表的现象。 -
存储引擎限制
- 不同存储引擎对列长度的限制不同。在 InnoDB 中,单行的最大存储长度为 65535 字节,超过部分会溢出到外部存储。
- 如果超出存储限制,MySQL 可能会通过复杂操作进行调整,间接导致表锁问题。
解决办法
-
在线DDL操作
在修改表结构时,可以通过以下方式减少锁表的风险:ALTER TABLE your_table MODIFY COLUMN your_column VARCHAR(500), ALGORITHM=INPLACE, LOCK=NONE;ALGORITHM=INPLACE:尝试在线模式修改,避免重建表。LOCK=NONE:允许 DDL 操作时读写并发。
但并不是所有情况下
INPLACE都适用,可能会回退到COPY模式。 -
减少锁表时间
- 分批操作:将表拆分成多个小表,先调整小表的结构,再合并数据。
- 降低并发影响:在业务低峰期执行操作。
-
在线工具
使用工具如 pt-online-schema-change 或 gh-ost,在不锁表的情况下完成修改。这些工具通过创建临时表和增量数据复制,最终切换表来避免锁表。
总结
VARCHAR 字段长度超过 255 时,可能涉及行格式变化或表重建,导致锁表问题。通过在线DDL操作或使用专用工具,可以有效缓解或避免锁表带来的影响。
相关文章:
为什么mysql更改表结构时,varchar超过255会锁表
在 MySQL 中,当修改表结构并将 VARCHAR 字段的长度设置为超过 255 时,可能会出现锁表的情况。这与 MySQL 的存储引擎(主要是 InnoDB)以及表的底层存储方式相关。 原因分析 行格式变化 InnoDB 存储引擎支持多种行格式(…...
ASP.NET Core中 JWT 实现无感刷新Token
在 Web 应用开发中,用户登录状态的管理至关重要。为了避免用户频繁遇到登录过期的问题,我们可以通过实现 JWT(JSON Web Token)刷新机制来提升用户体验 推荐: 使用 Refresh Token(双 Token 机制) 1. 生成和…...
函数(函数的概念、库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、函数的声明和定义、static和extern)
一、函数的概念 •C语⾔中的函数:⼀个完成某项特定的任务的⼀⼩段代码 •函数又被翻译为子函数(更准确) •在C语⾔中我们⼀般会⻅到两类函数:库函数 ⾃定义函数 二、库函数 1 .标准库和头文件 •C语⾔的国际标准ANSIC规定了⼀…...
物联网在烟草行业的应用
物联网技术在烟草行业的应用 物联网技术在烟草行业的应用主要体现在以下几个方面: 智能制造 :物联网技术可以实现对生产过程中的关键参数进行实时监测,确保产品的质量稳定可靠。同时,通过对设备的远程维护和故障诊断,…...
第6章:Python TDD实例变量私有化探索
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
Java操作Excel导入导出——POI、Hutool、EasyExcel
目录 一、POI导入导出 1.数据库导出为Excel文件 2.将Excel文件导入到数据库中 二、Hutool导入导出 1.数据库导出为Excel文件——属性名是列名 2.数据库导出为Excel文件——列名起别名 3.从Excel文件导入数据到数据库——属性名是列名 4.从Excel文件导入数据到数据库…...
BUUCTF_Web([GYCTF2020]Ezsqli)
1.输入1 ,正常回显。 2.输入1 ,报错false,为字符型注入,单引号闭合。 原因: https://mp.csdn.net/mp_blog/creation/editor/145170456 3.尝试查询字段,回显位置,数据库,都是这个。…...
微软宣布Win11 24H2进入新阶段!设备将自动下载更新
快科技1月19日消息,微软于1月16日更新了支持文档,宣布Windows 11 24H2进入新阶段。 24H2更新于2024年10月1日发布,此前为可选升级,如今微软开始在兼容的Windows 11设备上自动下载并安装24H2版本。 微软表示:“运行Wi…...
SpringBoot:解决前后端请求跨域问题(详细教程)
文章目录 一、前言二、解决方式 2.1 使用 CrossOrigin 注解(简单方便,适用于单个或少量接口)2.2 全局配置跨域(适用于整个项目中大量接口都需要跨域的情况)2.3 使用过滤器来处理跨域(更底层的实现方式&…...
Android-V lmkd 中的那些属性值
源码基于:Android V 相关博文: Android lmkd 机制详解(一) Android lmkd 机制详解(二) Android lmkd 机制从R到T 1. 汇总 属性名说明默认值 ro.lmk.debug 启动 lmkd 的debug 模式,会打印一…...
PageHelper快速使用
依赖 <!--分页插件PageHelper--> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version> </dependency>示例 /** * 封装分页结果…...
图像处理基础(3):均值滤波器及其变种
均值滤波器可以归为低通滤波器,是一种线性滤波器,其输出为邻域模板内的像素的简单平均值,主要用于图像的模糊和降噪。 均值滤波器的概念非常的直观,使用滤波器窗口内的像素的平均灰度值代替图像中的像素值,这样的结果就…...
力扣刷题心得_JAVA
数学 > 数组 > 链表 > 字符串 > 哈希表 > 双指针 > 递归 > 栈 > 队列 > 树 //一般力扣中传入的参数和新建的对象作为返回值,都不列入空间复杂度中 //但是面试的时候要和面试官商量好,灵活定义空间复杂度 //当然最好是就在传入的对象作为返回值,(在原…...
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目 项目概述项目视图效果一、侧边栏相关代码(一)HTML代码(二)css代码 二、登录页面(一)HTML代码(二)css代码…...
Unity编辑器缩放设置
Unity默认界面UI字体太小了,可以设置一下缩放 打开首选项, UI Scaling 设置成125%或者更大 ,然后重启...
ChatGPT大模型极简应用开发-CH1-初识 GPT-4 和 ChatGPT
文章目录 1.1 LLM 概述1.1.1 语言模型和NLP基础1.1.2 Transformer及在LLM中的作用1.1.3 解密 GPT 模型的标记化和预测步骤 1.2 GPT 模型简史:从 GPT-1 到 GPT-41.2.1 GPT11.2.2 GPT21.2.3 GPT-31.2.4 从 GPT-3 到 InstructGPT1.2.5 GPT-3.5、Codex 和 ChatGPT1.2.6 …...
Golang学习笔记_27——单例模式
Golang学习笔记_24——泛型 Golang学习笔记_25——协程Golang学习笔记_25——协程 Golang学习笔记_26——通道 文章目录 单例模式1. 介绍2. 应用场景3. 实现3.1 饿汉式3.2 懒汉模式 源码 单例模式 1. 介绍 单例模式是一种创建型设计模式,它确保一个类只有一个实例…...
хорошо哈拉少wordpress俄语主题
хорошо哈拉少wordpress俄语主题 wordpress俄文网站模板,推荐做俄罗斯市场的外贸公司建俄语独立站使用。 演示 https://www.jianzhanpress.com/?p7360...
[数据结构与算法]js实现二叉树
DFS 与 BFS dfs 递归 本质通过栈结构 bfs 层序遍历 通过队列结构 function permute(nums) {let res [];let cur []; // 记录当前内容let visted {}; //记录访问过的节点let len nums.length;function dfs(nth) {//递归终止条件if (nth len) {res.push([...cur]);return …...
MySQL程序之:连接到服务器的命令选项
本节介绍大多数MySQL客户端程序支持的选项,这些选项控制客户端程序如何建立与服务器的连接、连接是否加密以及连接是否压缩。这些选项可以在命令行或选项文件中给出。 连接建立的命令选项 本节介绍控制客户端程序如何建立与服务器的连接的选项。 表6.4连接建立选…...
龙芯k - 走马观碑组VLLX驱动移植汕
一、什么是urllib3? urllib3 是一个用于处理 HTTP 请求和连接池的强大、用户友好的 Python 库。 它可以帮助你: 发送各种 HTTP 请求(GET, POST, PUT, DELETE等)。 管理连接池,提高网络请求效率。 处理重试和重定向。 支…...
从Linux驱动本质到IgH EtherCAT完整流程:一篇彻底打通驱动、配置、库、硬件的硬核博客
在做EtherCAT运动控制、机械臂开发、机器人控制系统时,几乎所有人都会遇到一连串灵魂拷问:- Linux驱动到底是什么?- 为什么用户程序不能直接操作硬件?- ethercat.conf 绑定MAC、设置 generic 到底有什么用?- 用户程序…...
UE5项目实战:手把手集成Protobuf与Abseil库
1. 环境准备与工具检查 在开始集成Protobuf和Abseil之前,我们需要确保开发环境配置正确。我使用的是UE5.2.1和Visual Studio 2022组合,这个搭配目前稳定性最好。如果你还在用VS2019,建议升级到2022版本,因为Protobuf新版本对C20标…...
5分钟掌握Steam Economy Enhancer:提升交易效率300%的终极神器
5分钟掌握Steam Economy Enhancer:提升交易效率300%的终极神器 【免费下载链接】Steam-Economy-Enhancer 中文版:Enhances the Steam Inventory and Steam Market. 项目地址: https://gitcode.com/gh_mirrors/ste/Steam-Economy-Enhancer 还在为S…...
别再只用关键词搜索了!用Sentence Transformers给你的RAG系统做个‘语义检索’升级(附Python代码)
语义检索革命:用Sentence Transformers重构RAG系统的核心引擎 当开发者第一次接触RAG系统时,往往会被其看似简单的架构所迷惑——不就是检索加生成吗?但真正投入实战后,90%的人都会在第一个月遇到相同的问题:为什么系统…...
c++怎么利用C++17的filesystem--copy实现高效文件夹克隆【详解】
filesystem::copy 默认不递归复制子目录,需显式指定 fs::copy_options::recursive;若目标已存在,还需组合 overwrite_existing 才能覆盖。filesystem::copy 会递归复制子目录吗?默认不会。filesystem::copy 对目录只做“浅拷贝”—…...
语义网络表示法:从节点、关系到继承推理
在知识表示的发展过程中,语义网络表示法(Semantic Network Representation)是一种非常重要的方法。它用“节点—关系—节点”的结构来表示知识,把对象及其联系组织成有向图,因此比单纯的逻辑公式更直观,也更…...
写作柚助力高效论文写作之路
临近期末,很多大四学生都开始写论文了,可问题是,大学四年,学校并没有教我们怎么写论文,现在突然让写论文,写开题报告,修改论文,查重降重,写答辩PPT等等。在这毕业季&…...
世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf贡
1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...
STM32裸机开发进阶:时间片轮询 vs 前后台,你的项目到底该选谁?(附对比实验)
STM32裸机开发进阶:时间片轮询 vs 前后台,你的项目到底该选谁?(附对比实验) 在嵌入式开发领域,STM32系列微控制器因其出色的性能和丰富的外设资源,成为了众多工程师的首选。然而,随着…...
