2011-12-18 2 views
12

型定義を繰り返すことなく、MySQLの列の名前を変更できますか?型定義を繰り返さなくても、mysqlテーブルの列名を変更する

information_schemaにハックする必要はありません。

+2

はそれが可能だとは思わない。 –

+0

@Tomasは、私たちは列の名前を変更すべき状況のどの種類に聞いても、そのタイプの定義を繰り返すことなく?ありがとう:) – tyger

+1

@tyger、中あなただけの列の名前を変更したい場合 – TMS

答えて

9

ALTER TABLE syntaxは、そのような可能性を提供していないようだ。

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name 
    [alter_specification [, alter_specification] ...] 
    [partition_options] 

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name 
    partition_options 

alter_specification: 
    table_options 
[...] 
    | CHANGE [COLUMN] old_col_name new_col_name column_definition 
     [FIRST|AFTER col_name] 
    | MODIFY [COLUMN] col_name column_definition 
     [FIRST | AFTER col_name] 
[...] 

More specifically

あなたがCHANGEMODIFYを使用すると、column_definitionはデータ タイプとに適用するすべての属性を含める必要があります新しい列である は、PRIMARY KEYまたはUNIQUEなどのインデックス属性よりも優先されます。属性 は元の定義にありますが、新しい 定義では指定されていません。私の場合は

+0

Alvaro、素敵な答えをありがとう!最後の段落は私の質問に対する明確な答えのように見えます。 – TMS

1

私はその後、より速く、簡単に私のC#のオブジェクトにデータをロードできるようにするには、「idSomething」に「id_something」からすべてのCOLUMNNAMESを変更するようでした。私はそれを行うためのスクリプトを探していましたし、それはあなたが、私が使用される主な機能持っている:( 最後に、私はここでのC# に自分でそれをやった見つけることは不可能になります。

を、私はそれが皆のために便利になりたいの! (あなたはINFORMATION_SCHEMAをハックしない限り)

public bool columnesRename(string oldName, string newName, string dataBase, string dataTable) 
    { 
     bool res = true; 
     string definicio = columnaDefinicioGet(oldName, dataBase, dataTable); 
     cmd.CommandText = String.Format("alter table {0} change {1} {2} {3} ", dataTable, oldName, newName, definicio); 
     Debug.WriteLine(String.Format("canviant taula {0}: {1} per {2}", dataTable, oldName, newName)); 
     Debug.WriteLine(cmd.CommandText); 
     Debug.WriteLine(cmd.ExecuteNonQuery()); 
     return res; 
    } 

    public string columnaDefinicioGet(string columna, string dataBase, string dataTable) 
    { 
     string definicio = ""; 
     cmd.CommandText = String.Format 
     (
      @"select column_type, is_nullable, extra, column_default from information_schema.columns where table_schema = '{0}' and table_name = '{1}' and column_name = '{2}'" 
      , dataBase, dataTable, columna 

     ); 
     MySqlDataReader dr = cmd.ExecuteReader(); 
     dr.Read(); 
     string nulONo = (dr[1].ToString() == "NO") ? "NOT NULL" : "NULL"; 
     string valorDefault = (dr[3].ToString() == "NULL" || dr[3].ToString() == "") ? dr[3].ToString() : "DEFAULT '" + dr[3].ToString() + "'"; 

     definicio = String.Format("{0} {1} {2} {3}", dr[0], nulONo, dr[2], valorDefault); 
     dr.Close(); 
     return definicio; 
    } 
関連する問題