目錄
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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++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教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1246
24
如何實作MySQL中查看表格的資料的語句? 如何實作MySQL中查看表格的資料的語句? Nov 08, 2023 pm 01:40 PM

標題:MySQL中查看表格的資料的語句及具體程式碼範例MySQL是一種開源的關係型資料庫管理系統,它被廣泛應用於各種規模的應用程式。在MySQL中,檢視表格的資料是一個非常基礎的操作,以下將介紹如何透過具體的語句和程式碼範例來實現這項操作。首先,我們將介紹透過MySQL命令列工具查看表格的資料的語句及具體程式碼範例。假設我們有一個名為「employees」的表,以下是通

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 12:11 PM

MySQL是一種常用的關聯式資料庫管理系統,它支援重命名表的操作。通常情況下,重新命名表會帶來一定的風險,因此在執行這個操作時應該非常小心謹慎。在本文中,我們將探討如何在MySQL中實作重新命名表的語句,並提供詳細的程式碼範例。在MySQL中,可以使用ALTERTABLE語句來重新命名表。下面是ALTERTABLE重命名語句的基本語法:ALTERTABLEo

如何在Oracle資料庫中設定表格的唯讀權限? 如何在Oracle資料庫中設定表格的唯讀權限? Mar 06, 2024 pm 03:03 PM

在Oracle資料庫中,設定表格的唯讀權限是非常重要的操作,可以保護資料的安全性並防止誤操作。以下將介紹如何在Oracle資料庫中設定表格的唯讀權限,並提供具體的程式碼範例。首先,我們需要了解在Oracle資料庫中,使用者透過授權取得對錶的權限。表的權限包括SELECT(查詢)、INSERT(插入)、UPDATE(更新)和DELETE(刪除)等操作。在這裡,我們將介

微軟電腦殼建議設定清單—微軟電腦殼建議設定列表 微軟電腦殼建議設定清單—微軟電腦殼建議設定列表 Dec 28, 2023 am 11:36 AM

微軟電腦殼是用來保護電腦的外殼,它不僅能夠提供額外的保護功能,還能夠增添裝飾效果。對於那些希望為自己的電腦增加一些個人化元素的用戶來說,微軟電腦殼是一個非常理想的選擇。微軟電腦殼推薦配置表是一個詳細的表格,列出了適用於不同型號和規格的微軟電腦殼的建議配置。我們將詳細介紹微軟電腦殼推薦配置表,並對其中的一些方面進行解釋說明1.適用型號在推薦配置表中,首先要考慮的是微軟電腦殼的適用型號。不同型號的微軟電腦殼可能有不同的尺寸和形狀,所以需要根據電腦型號選擇合適的殼。配置表中會列出適用於不同型號的微

使用MySQL建立推薦系統表實現推薦系統功能 使用MySQL建立推薦系統表實現推薦系統功能 Jul 02, 2023 am 10:01 AM

使用MySQL建立推薦系統表實現推薦系統功能推薦系統是一種用於根據使用者的喜好和行為給予使用者個人化推薦內容的系統。在推薦系統中,資料庫是一個關鍵的組成部分,它保存了用戶資料、物品資料和使用者-物品互動資料等資訊。 MySQL作為一種常用的關聯式資料庫管理系統,可以用來建立推薦系統表,並實現推薦系統的功能。本文將介紹如何使用MySQL建立推薦系統表,並透過程式碼範例展示

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