Mysql
用另一個表中的數據替換 MYSQL 表 - 無需停機
我有兩個結構相同的表:
表 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 檢查來支持確定將來使用哪個表。