問題:在mysql資料庫中,有100個表的欄位、類型完全一樣。當我需要增/刪/改一個欄位的時候,所有的表都要做相應的改動。一個表一個表的改很麻煩。

請問有沒有相關的工具能夠解決該問題,或者用C#做個工具思路是怎麼樣的?注意(這些表裡的數據非常大,類似商品表)。


正經的dba會寫個腳本連上去用一個事務來處理。

我理解題主問的是有100個表,這100個表結構完全一樣,要給這100個表「同時」alter table,而不是在這100個表上面同時update數據。

結論是:沒什麼好的辦法,只能挨個改。

這裡面涉及兩個問題:

1.表比較大的情況下,改表結構鎖表時間很長;有主從同步的時候,改表會導致從庫延遲。

這個可以用pt-online-schema-change 來解決,可以把改表結構對線上系統的影響降到最低(用新結構建空表-逐條複製數據-rename,同時用觸發器保證複製過程中對數據的增刪改也應用到新表上,這些操作都可以不引起可觀延遲地同步到從庫)

2.改表結構有先後,改的過程中不能保證每個分表結構一致。

如果正常挨個改的話,不一致是肯定存在的,沒法解決,只能讓程序盡量兼容。或者用online-schema-change類似的思路,把改表的前兩個步驟做了(建空表,複製並同步數據),最後統一rename,這樣其實還是有一瞬間100個表不完全一致,但是能把不一致的時間縮短到最小。

——

以前某公司就有這樣的100個表,而且
ORM還在內存中緩存了表結構,導致改表結構造成的影響很大。

最早的時候一改表結構代碼就報錯,因為有表結構緩存,只要結構變了拼的SQL語句就會出問題,只能改完立刻重啟web服務清除緩存。為了解決這個問題,就改用mysql返回的metadata來生成ORM對象,讓讀查詢都脫離這個表結構緩存。

然後對這種100個表不一致問題,在這100個表之外建一個單獨的結構表xxx_struct,這個表不存數據,只用它來生成表結構緩存,在改表結構的流程上做個規範,加欄位的時候先改存數據的表結構,然後再改_struct,刪欄位相反,總之保證_struct表比真實表欄位少,就沒啥問題了。
謝邀。這幾個表的相應欄位的值是一樣或者相關聯的嗎?如果是,建議在資料庫中增加這些欄位的索引,即可實現更改某一欄位,同時更改其他表的相應欄位。


字元串數組 表名數組foreach 字元串 item as 表名數組----字元串 當前sql = delete * from 加 item 加 where ....
表的數據量非常大應該通過 表分區 來解決.


1、寫個批處理腳本2、在從庫上離線修改,然後驗證3、從主庫同步數據4、暫停業務,等從庫和主庫完全一致後,將此從庫切換為主庫,恢復業務。非DBA,僅供參考。
建表之時為何不建外鍵約束?目的何在
萬能excel大法:公式,拉,複製,控制台執行。
為什麼會有這種奇葩的資料庫設計?
推薦閱讀:
相关文章