使用别名重命名MySQL中的列

时间:2009-12-22 05:12:27

标签: sql mysql

实际上问题出现了,因为我们已经命名了一个列authorization,它在MySQL上没问题,但在Postgres上失败了,authorization是一个保留关键字。

我们希望所有模式甚至在不同的数据库上同步,因此我们希望将MySQL目录中的authorization重命名为中性。

如果重命名MySQL表列可以与应用程序的旧版本和新版本无缝地工作至少几天,那么转换是顺利的。

有人知道怎么做吗?一个好主意是拥有某种别名/重定向,例如:创建一个新列_authorization,该列实际上与authorization相同,但名称不同。使用新名称_autorization的查询和使用旧名称的查询一样有效。然后我们可以更新应用程序。如果所有服务器都有最新的二进制文件,我们可以删除别名并重命名该列。

有什么想法吗?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

  

一个好主意是拥有某种别名/重定向......

不存在此类功能。最接近的是使用基于表的视图,因为在视图中重命名列更容易,因为没有任何底层数据需要更改。否则:

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

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

答案 1 :(得分:1)

我还必须使用列的别名(例如,特定应用需要'id'列而不是'entry_id')。
我能够从表中创建一个视图(MySQL 5.1+推荐用于视图),并为culprit列添加了一个额外的别名。对于您示例中的“授权”列:

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