MySQL中Alter table 不长时间锁表的情况汇总。_MySQL
bitsCN.com
前言:
MySQL 的大表运维总是令人头疼的一件事,特别是大表表结构的修改尤为困难。
首先,alter table 的process不可被kill , 一旦执行就不可回退。
其次,大多数的alter table操作都会涉及 lock --- copy to new table --- rename --- unlock的过程,锁表时间会很长。
本文不是讨论如何进行大表表结构变更, 而是汇总一些不涉及copy to new table这一步的alter table情况。
这些情况下,mysql会直接修改frm文件,而lock的时间也仅是秒级的。
MySQL 5.0 系列 (即5.0.x 版本)
如果你是这个版本,很遗憾所有alter table 操作都会进行temp table copy。以下是摘自官方文档的解释:
If you use any option to ALTER TABLE
other than RENAME
, MySQL always creates a temporary table, even if the data wouldn't strictly need to be copied (such as when you change the name of a column).
MySQL 5.1 系列 (即5.0.x 版本)
以下操作不会有copy temp table操作,即锁表时间较短。
1. ALTER TABLE tbl_name
RENAME TO new_tbl_name
2. 不涉及数据修改的操作
2.1 列改名 (除了innodb)
2.2 修改默认值 (注意:必须使用 modify ,而不能使用change)
2.3 增加ENUM的枚举定义 (注意:仅当新增枚举在当前允许最大值內,例:1B 可存8个枚举,2B可存128个枚举)
3. 通过add partition 添加分区
4. 重命名索引
5. 添加删除索引 (仅 innodb plugin支持)
详见官方文档说明:
bitsCN.com
For
ALTER TABLE <em class="replaceable"><code>tbl_name
RENAME TOnew_tbl_name
without any other options, MySQL simply renames any files that correspond to the tabletbl_name
without making a copy. (You can also use theRENAME TABLE
statement to rename tables. See Section 13.1.33, “RENAME TABLE
Syntax”.) Any privileges granted specifically for the renamed table are not migrated to the new name. They must be changed manually.Alterations that modify only table metadata and not table data can be made immediately by altering the table's
.frm
file and not touching table contents. The following changes are fast alterations that can be made this way:
Renaming a column, except for the
InnoDB
storage engine.Changing the default value of a column (except for
NDB
tables; see Limitations ofNDBCLUSTER
online operations).Changing the definition of an
ENUM
orSET
column by adding new enumeration or set members to the end of the list of valid member values, as long as the storage side of the data type does not change. For example, adding a member to aSET
column that has 8 members changes the required storage per value from 1 byte to 2 bytes; this will require a table copy. Adding members in the middle of the list causes renumbering of existing members, which requires a table copy.
ALTER TABLE ... ADD PARTITION
creates no temporary table except when used withNDB
tables.ADD
orDROP
operations forRANGE
orLIST
partitions are immediate operations or nearly so.ADD
orCOALESCE
operations forHASH
orKEY
partitions copy data between changed partitions; unlessLINEAR HASH
orLINEAR KEY
was used, this is much the same as creating a new table (although the operation is done partition by partition).REORGANIZE
operations copy only changed partitions and do not touch unchanged ones.Renaming an index, except for
InnoDB
.Adding or dropping an index, for
InnoDB
(ifInnoDB Plugin
is used) andNDB
.

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

说明1、Process类是抽象类(所有方法都是抽象的),封装进程(即执行程序)。2、Process类提供了从过程输入、执行输出到过程、等待过程完成、检查过程的退出状态和销毁过程的方法。实例Processp=null;try{p=Runtime.getRuntime().exec("notepad.exe");p.waitFor();}catch(Exceptione){e.printStackTrace();}System.out.println("我想被打印...

标题:MySQL中查看表的数据的语句及具体代码示例MySQL是一种开源的关系型数据库管理系统,它被广泛应用于各种规模的应用程序中。在MySQL中,查看表的数据是一个非常基础的操作,下面将介绍如何通过具体的语句和代码示例实现这一操作。首先,我们将介绍通过MySQL命令行工具查看表的数据的语句及具体代码示例。假设我们有一个名为“employees”的表,以下是通

在Oracle数据库中,设置表的只读权限是非常重要的操作,可以保护数据的安全性并防止误操作。下面将介绍如何在Oracle数据库中设置表的只读权限,并提供具体的代码示例。首先,我们需要了解在Oracle数据库中,用户通过授权获得对表的权限。表的权限包括SELECT(查询)、INSERT(插入)、UPDATE(更新)和DELETE(删除)等操作。在这里,我们将介

使用MySQL创建推荐系统表实现推荐系统功能推荐系统是一种用于根据用户的喜好和行为给用户个性化推荐内容的系统。在推荐系统中,数据库是一个关键的组成部分,它保存了用户数据、物品数据和用户-物品交互数据等信息。MySQL作为一种常用的关系型数据库管理系统,可以用来创建推荐系统表,并实现推荐系统的功能。本文将介绍如何使用MySQL创建推荐系统表,并通过代码示例展示

微软电脑壳是一种用于保护电脑的外壳,它不仅能够提供额外的保护功能,还能够增添装饰效果。对于那些希望为自己的电脑增加一些个性化元素的用户来说,微软电脑壳是一个非常理想的选择。微软电脑壳推荐配置表是一个详细的表格,列出了适用于不同型号和规格的微软电脑壳的推荐配置。我们将详细介绍微软电脑壳推荐配置表,并对其中的一些方面进行解释说明1.适用型号在推荐配置表中,首先要考虑的是微软电脑壳的适用型号。不同型号的微软电脑壳可能有不同的尺寸和形状,所以需要根据电脑型号选择合适的壳。配置表中会列出适用于不同型号的微

MySQL是一种常用的关系型数据库管理系统,它支持重命名表的操作。通常情况下,重命名表会带来一定的风险,因此在执行这个操作时应该非常小心谨慎。在本文中,我们将探讨如何在MySQL中实现重命名表的语句,并提供详细的代码示例。在MySQL中,可以使用ALTERTABLE语句来重命名表。下面是ALTERTABLE重命名语句的基本语法:ALTERTABLEo

MySQL创建用户权限表实现用户权限管理功能MySQL是一种常用的关系型数据库管理系统,它提供了强大的用户权限管理功能。在一个多用户的数据库环境中,合理地管理用户的权限是非常重要的。本文将介绍如何通过创建用户权限表来实现用户权限管理功能,并通过代码示例来说明。一、创建权限表首先,我们需要创建一个权限表来存储用户的权限信息。权限表的字段包括用户ID(user_

Oracle数据库中哪些情况会导致表被锁定?在Oracle数据库中,表被锁定是一个比较常见的情况,一般是由于用户进行数据操作时导致的。常见的表被锁定的情况包括行级锁定、事务级锁定,以及DDL操作等。下面将具体介绍这些情况并给出相应的代码示例。行级锁定:当用户在一个事务中对表进行更新操作时,数据库会对相应的数据行进行锁定,防止其他事务同时修改该数据。如果事务没
