2009-12-22 48 views
1

實際上問題出現了,因爲我們已經命名了列authorization,這在MySQL上可以正常使用,但在Postgres上失敗,authorization是保留關鍵字。在MySQL中使用別名重命名列

即使在不同的數據庫中,我們也希望所有模式都同步,因此我們希望將MySQL目錄中的authorization重命名爲中性。

如果重新命名MySQL表列可以與舊版本和更新版本的應用程序無縫地工作至少幾天,以便過渡順利,那將會很棒。

有沒有人知道如何做到這一點?一個好主意是有某種別名/重定向,例如創建一個新列_authorization,該列與authorization實際上是同一列,但使用新名稱。使用新名稱_autorization的查詢將使用舊名稱進行查詢。然後我們可以更新應用程序。如果所有服務器都有最新的二進制文件,我們可以刪除別名並重命名該列。

任何想法?任何幫助是極大的讚賞。

回答

4

一個不錯的想法是有某種別名/重定向...

沒有這樣的功能存在。最接近的是使用基於表的視圖,因爲在視圖中重命名列更容易,因爲沒有任何基礎數據要更改。否則:

使用ALTER TABLE語句重命名MySQL的列:

ALTER TABLE [your table] 
    CHANGE authorization [new_col_name] [column_definition] 
+0

你好,謝謝。害怕但並不意外:)節日快樂! – user1946784 2009-12-24 13:20:20

1

我也不得不使用別名來一列(例如需要「ID」列而不是「entry_id」一個特定的應用程序)。
我能夠從表中創建一個視圖(推薦用於視圖的MySQL 5.1+),併爲罪魁禍首欄添加一個額外的別名。從您的示例「授權」列:

CREATE VIEW maintable_view AS 
    SELECT *, authorization AS authcol FROM MAINTABLE 

如果您運行視圖中的一個更新查詢,「authcol」設置爲一個新值,
這將更新「的「授權」列maintable」。

UPDATE maintable_view SET authcol=22 WHERE id=3 

http://dev.mysql.com/doc/refman/5.1/en/create-view.html