首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 表名原子性互換:雙表鎖定與 RENAME 實戰指南

     編輯:MySQL 資料庫相關知識

前言

在類似 pt-online-schema-change(pt-osc)的線上變更場景中,經常需要將兩張表的名稱進行原子性互換。若採用先後執行 RENAME 的方式,中間間隙會導致寫入失敗,如何確保萬無一失?

核心方案

MySQL 官方文檔提供了標準做法:同時對兩張表加持寫鎖,禁止寫入,再執行三步 RENAME 操作。具體語句如下:

LOCK TABLES t1 WRITE, t2 WRITE;
ALTER TABLE t1 RENAME TO t3;
ALTER TABLE t2 RENAME TO t1;
ALTER TABLE t3 RENAME TO t2;
UNLOCK TABLES;

關鍵點解析

  • LOCK TABLES ... WRITE:一次性對多張表加表級寫鎖,阻塞所有寫入,保證原子性。
  • ALTER TABLE ... RENAME:在鎖保護下依次改名,避免中間狀態被其他會話看到。
  • UNLOCK TABLES:釋放鎖,恢復正常讀寫。

整個過程在鎖保護下完成,對業務影響極小,適合線上高併發環境。

總結

採用「雙表寫鎖 + 三步 RENAME」即可安全完成表名互換,避免數據寫入失敗風險,是 MySQL 運維必備技巧。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved