2011-12-18 10 views
12

क्या इसकी टाइप परिभाषा को दोहराने के बिना MySQL में एक कॉलम का नाम बदलना संभव है?अपनी टाइप परिभाषा को दोहराने के बिना mysql तालिका में एक कॉलम का नाम बदलें

कृपया info_schema में हैक किए बिना।

+2

अपने प्रकार परिभाषा दोहराए बिना लगता है कि नहीं यह संभव है (जब तक आप INFORMATION_SCHEMA हैक)। –

+0

@Tomas मैं में स्थिति किस तरह हम एक स्तंभ का नाम बदलने चाहिए पूछना कर सकते हैं? धन्यवाद :) – tyger

+1

@tyger, में अगर आप कॉलम – TMS

उत्तर

9

ALTER TABLE syntax ऐसी संभावना प्रदान करते हैं नहीं लगता है:, column_definition डेटा प्रकार और सभी विशेषताओं कि करने के लिए आवेदन करना चाहिए शामिल करना चाहिए जब आप CHANGE या MODIFY का उपयोग

:

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 specificallyPRIMARY KEY या UNIQUE जैसे इंडेक्स विशेषताओं की तुलना में नया कॉलम, अन्य । गुण मूल परिभाषा में मौजूद है लेकिन नई परिभाषा के लिए निर्दिष्ट नहीं किया गया है।

+0

अलवरो का नाम बदलना चाहते हैं, तो अच्छे जवाब के लिए धन्यवाद! अंतिम अनुच्छेद मेरे प्रश्न के निश्चित उत्तर की तरह दिखता है। – TMS

1

मेरे मामले में मैं "id_something" से "idSomething" से सभी कॉलम नाम बदलना चाहता था ताकि मेरे सी # ऑब्जेक्ट को डेटा को तेज़ी से और आसानी से लोड कर सकें। मुझे लगता है कि ऐसा करने के लिए एक स्क्रिप्ट की तलाश में गया था और यह :( खोजने के लिए असंभव लग रहा है अंत में मैं अपने आप को द्वारा यह किया सी # यहाँ आप मुख्य कार्य है कि मैं प्रयोग किया जाता है:

मैं इसे हर किसी के लिए उपयोगी हो जाएगा कामना करते हैं!

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; 
    } 
संबंधित मुद्दे