目录
MySQL 5.1 系列  (即5.0.x 版本)
首页 数据库 mysql教程 MySQL中Alter table 不长时间锁表的情况汇总。_MySQL

MySQL中Alter table 不长时间锁表的情况汇总。_MySQL

Jun 01, 2016 pm 01:49 PM
process

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支持)


详见官方文档说明:

  • For ALTER TABLE <em class="replaceable"><code>tbl_name RENAME TO new_tbl_name without any other options, MySQL simply renames any files that correspond to the table tbl_name without making a copy. (You can also use the RENAME TABLEstatement 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 of NDBCLUSTER online operations).

    • Changing the definition of an ENUM or SET 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 a SET 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 with NDB tables. ADD or DROPoperations for RANGE or LIST partitions are immediate operations or nearly so. ADD or COALESCE operations forHASH or KEY partitions copy data between changed partitions; unless LINEAR HASH or LINEAR KEY was used, this is much the same as creating a new table (although the operation is done partition by partition). REORGANIZEoperations copy only changed partitions and do not touch unchanged ones.

  • Renaming an index, except for InnoDB.

  • Adding or dropping an index, for InnoDB (if InnoDB Plugin is used) and NDB.

bitsCN.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

java中的Process怎么使用 java中的Process怎么使用 May 10, 2023 am 11:04 AM

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

如何实现MySQL中查看表的数据的语句? 如何实现MySQL中查看表的数据的语句? Nov 08, 2023 pm 01:40 PM

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

如何在Oracle数据库中设置表的只读权限? 如何在Oracle数据库中设置表的只读权限? Mar 06, 2024 pm 03:03 PM

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

使用MySQL创建推荐系统表实现推荐系统功能 使用MySQL创建推荐系统表实现推荐系统功能 Jul 02, 2023 am 10:01 AM

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

微软电脑壳建议配置清单—微软电脑壳建议配置列表 微软电脑壳建议配置清单—微软电脑壳建议配置列表 Dec 28, 2023 am 11:36 AM

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

如何实现MySQL中重命名表的语句? 如何实现MySQL中重命名表的语句? Nov 08, 2023 pm 12:11 PM

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

MySQL创建用户权限表实现用户权限管理功能 MySQL创建用户权限表实现用户权限管理功能 Jul 02, 2023 pm 06:57 PM

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

Oracle数据库中哪些情况会导致表被锁定? Oracle数据库中哪些情况会导致表被锁定? Mar 10, 2024 pm 04:42 PM

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

See all articles