Mysql

用另一個表中的數據替換 MYSQL 表 - 無需停機

  • December 9, 2021

我有兩個結構相同的表:

表 1 和表 2

id INT PRIMARY KEY, 
a TINYINT, 
b TINYINT, 
c TINYINT  

Table1 正被其他會話的查詢積極使用;Table2 不被其他任何東西引用/訪問。我的目標是只得到 Table1,但擁有來自 Table2 的數據。

(注意 Table2 和 Table1 沒有相同的 id-PRIMARY KEY 集。)

在不冒 Table1 暫時不存在於其他會話的風險的情況下,最好的方法是什麼?

我知道我可以做類似的事情:

DROP TABLE Table1; 
ALTER TABLE Table2 RENAME Table1;

但我不確定如何確保在 Table1 不存在或為空時不會嘗試查詢它。我是否使用事務或鎖定表或其他東西?(理想情況下,我希望任何其他會話的查詢返回舊的 Table1 或新的 Table1 數據,而不是失敗。)

我在 PHP 中使用 CodeIgniter 進行呼叫。

更新: 看起來 這篇文章使用MySQL RENAME TABLE 文件中的方法來回答它:

RENAME TABLE Table1 TO Table1_old, Table2 To Table1;

然後我可以在閒暇時 DROP Table1_old

怎麼看?將您的應用程序指向視圖,然後在無法訪問指向 table2 的瞬間更改視圖。完成後,您可以刪除 table1。

我見過的許多企業系統使用一組表,少則兩個,並使用動態 SQL 進行查詢。檢索並使用目前表名。

這適用於大型DB2 系統上的日誌交換或輪換。可以使用簡單的 mod 檢查來支持確定將來使用哪個表。

引用自:https://dba.stackexchange.com/questions/169121