我有5個數據庫(或模式),其中有超過100個表在MySQL中,現在我需要創建新的數據庫,有像老表一樣的表。 新表的名字都是這種格式Mysql創建表像其他表
「OldDatabaseName」 _ 「OldTableName」 _history
及其列幾乎一樣,只是我需要添加像START 2個新列和END每個表的時間戳。
不會有新表的任何外鍵,也沒有任何自動遞增列,只是ID和START列將是唯一的關鍵。
那麼,我需要什麼樣的SQL來達到這個目的?
我有5個數據庫(或模式),其中有超過100個表在MySQL中,現在我需要創建新的數據庫,有像老表一樣的表。 新表的名字都是這種格式Mysql創建表像其他表
「OldDatabaseName」 _ 「OldTableName」 _history
及其列幾乎一樣,只是我需要添加像START 2個新列和END每個表的時間戳。
不會有新表的任何外鍵,也沒有任何自動遞增列,只是ID和START列將是唯一的關鍵。
那麼,我需要什麼樣的SQL來達到這個目的?
「有沒有通過解決方案的任何循環?」 是的。
寫一個存儲過程和:
聲明變量,光標和Exception_Handler(我們使用Exception_Handler找到我們的循環的退出點)從INFORMATION_SCHEMA
加載所有schema_names/table_names。表格
應該被複制到遊標中(遊標允許我們將
數據提取到變量中,以便我們可以在我們的語句中使用它們)。
的人指出:
空表,無按鍵:
create table new_schema_name.new_table_name
select * from old_schema_name.old_table_name limit 0;
填寫表格,無按鍵(包括原始表的所有數據):
create table new_schema_name.new_table_name
select * from old_schema_name.old_table_name;
空表w ITH(其需要的情況下)的原始表的所有屬性:
create table new_schema_name.new_table_name
like old_schema_name.old_table_name ;
如果你有小表(< 500萬條記錄[還取決於硬件]),你不想重複這項工作,您可以使用GUI通過拖放來複製表格。 Navicat for MySQL支持這個功能。 之後,您可以使用texteditor + excel構建您的alter命令來調整表名並添加新列。可以從information_schema.tables中選擇table_name的列表。 與運行程序相比,這需要更多的時間,但與編寫和測試程序相比,初學者應該更快。
我推薦的存儲過程方法
鑑於最近的評論,最好的答案似乎是放棄使用mysqldump表,修改再輸入CREATE TABLE
和INSERT
之前輸出中的表名。然後你可以根據自己的喜好ALTER TABLE
和UPDATE
這個新的tablea。
第1課:對每個數據庫/模式的腳本文件,以便能夠重新創建或複製創建數據庫。 – jarlh