2017年7月7日 星期五

MySQL 複製資料表

要複製一個現有的資料表,須先產生結構相同的新資料表,再將資料複製寫入。

複製步驟:
  1. 先產生一個結構相同的新資料表
    CREATE TABLE new_table LIKE old_table;
    
  2. 再將舊資料表資料,寫入新資料表
    INSERT new_table SELECT * FROM old_table;
    


CREATE TABLE ... LIKE 語法,注意事項:
  • 只能用於基本資料表(base table),不能用於 view。
  • 舊資料表 LOCK 時無法使用。(測試 LOCK READ 可以,但 LOCK WRITE 時不行)
  • CREATE TABLE ... LIKE 不是只複製 .frm 檔,而是會做跟 CREATE 一樣的檢查,所以若目前的 SQL mode 跟當初創建舊資料表時不同,若創建語法跟目前 SQL mode 不合時,可能會執行失敗。
  • 無法複製:DATA DIRECTORY 設定、INDEX DIRECTORY 設定、外鍵、trigger。
  • 若是複製的新資料要做成暫存資料表(TEMPORARY),則使用 CREATE TEMPORARY TABLE ... LIKE 語法。


參考:
Duplicating a MySQL table, indexes and data - Stack Overflow
MySQL :: MySQL 5.7 Reference Manual :: 13.1.18.4 CREATE TABLE ... LIKE Syntax

沒有留言:

張貼留言