2010-01-02 33 views
1

場景:我希望能夠改變他們的用戶名的用戶(可惜我沒考慮增加這一功能,當我開始的部位),但MySQL數據庫擁有110個表。更改字段在許多MySQL表

我將不得不製作一個腳本,執行110個查詢來更新每個表中的用戶名(並且記得在添加新表時更新腳本),或者是否有鏈接所有字段的方法的表,所以更新一個表中的用戶名更新它在所有其他?

+3

更新多個表的關鍵是一個壞主意。您可能希望藉此機會重構數據庫,爲所有用戶添加一個自動增量整數主鍵,並將其用作您的外鍵而不是用戶名。這是一個很大的改變,但一旦完成,你不會後悔。你甚至可能會獲得更好的性能和更少的磁盤使用量。 – 2010-01-02 23:21:43

+0

我有一個自動增量整數鍵爲每個用戶,用戶名,但所有其他表引用用戶名,否則這將是一個非問題,我不會問這個問題。 – 2010-01-02 23:23:43

+0

好吧,看起來這是不可能的,我只需要做一堆查詢。考慮到網站是活的,我必須使用MyISAM並切換到使用userid而不是用戶名。 – 2010-01-02 23:30:04

回答

0

您可以使用外鍵約束與ON UPDATE CASCADE自動更新外鍵被修改時(只InnoDB的)。

但是這將是最好不要使用用戶名作爲外鍵。您通常應該使用surrogate key作爲外鍵,這不是問題。

+0

這隻適用於InnoDB表格,它還沒有在MyISAM中實現 – danielrsmith 2010-01-02 23:26:38

+0

確實,謝謝指出。我將它添加到我的答案中。 – 2010-01-02 23:29:45

1

我假設你正在使用的用戶名作爲你的主鍵,因爲你已經看到了需要這樣做。將表結構更改爲使用auto_increment ID作爲主鍵而不是用戶名,並從其他表中引用ID,而不是直接引用該名稱。這樣可以防止表中的用戶名重複,並且可以通過更新單個表來更改用戶名。

請注意,您可能希望在用戶名本身上保留一個UNIQUE索引以防止出現重複:目前,您通過使用名稱作爲PK來獲得「免費」,並且您可以繼續讓數據庫管理它制定一個新的索引。

+0

在回覆我的評論時,他說他每個用戶都有自動增量編號,我認爲這也是他的主要關鍵。 – 2010-01-02 23:30:55

相關問題