alex_: mehrere tabellen modifizieren

huhu folx,

falls sich jemand gut mit mysql auskennt, vielleicht kann er mir n tipp geben, wie ich folgendes in einer Zeile unterkriege:

Ich will in jeder Tabelle einer Datenbank Spalten umdefinieren (zb Text->Varchar) sofern die Tabellen die Spalte definiert haben.
Oder zb die SPalte einfach nur löschen sofern die Tabellen diese aufweisen.

Kann mir das jemand n Einzeiler geben? zur Not muß ich das dann in einer Schleife (Perl) tun...

thx

  1. Hi,
    zum ändern des spaltennamens und typs:

      
    ALTER TABLE `nachrichten` CHANGE `altername` `neuername` INT( 11 ) DEFAULT NULL  
    
    

    zum löschen

      
    ALTER TABLE `nachrichten` DROP `neuername`  
    
    

    neue spalte

      
    ALTER TABLE `nachrichten` ADD `neuesfeld` VARCHAR( 11 ) NOT NULL ;  
    
    

    MfG

    1. argl, hast du dir überhaupt durchgelesen was ich gefragt habe?

      1. Hi,

        argl, hast du dir überhaupt durchgelesen was ich gefragt habe?

        Ja, aber du kannst nur eine tabelle anch der anderen machen.

        für mehrere spalten musst du das so machen:

          
        ALTER TABLE `test` RENAME `tabelle` ;  
          
        ALTER TABLE `tabelle`  
        ADD `neuesfeld1` INT NOT NULL ,  
        ADD `neuesfeld2` INT NOT NULL ,  
        ADD `neuesfeld3` INT NOT NULL ;  
          
        ALTER TABLE `tabelle`  
        CHANGE `neuesfeld1` `umbenannt` INT( 11 ) DEFAULT '0' NOT NULL ,  
        CHANGE `neuesfeld2` `neuesfeld2` TIMESTAMP DEFAULT '0' NOT NULL ,  
        CHANGE `neuesfeld3` `neuesfeld3` INT( 11 ) DEFAULT '0';  
          
        ALTER TABLE `tabelle`  
          DROP `umbenannt`,  
          DROP `neuesfeld2`,  
          DROP `neuesfeld3`;  
          
        
        

        jetzt zufrieden?

        MfG

        1. nope, irgendwie hatte ich das anders gemeint:

          Ich habe eine DB mit hunderten von Tabellen. Jetzt will ich in allen Tabellen zb eine neue Spalte hinzufügen. Angenommen ich kenn die Tabellennamen nicht mal.

          so würde ich in perl:

          • SHOW TABLES
             - für jede table:
              - next wenn die tabelle nicht die zu löschende spalte hat
              - spalte löschen

          Die Frage ist nun, ob ich mir an der Stelle Perl Code sparen kann indem ich mysql schachtele: "ALTER TABLE SELECT ... DROP ..." irgendwie sowas hatte ich vermutet, da hört aber mein Wissen auf...

          gruß

          Hi,

          argl, hast du dir überhaupt durchgelesen was ich gefragt habe?
          Ja, aber du kannst nur eine tabelle anch der anderen machen.

          für mehrere spalten musst du das so machen:

          ALTER TABLE test RENAME tabelle ;

          ALTER TABLE tabelle
          ADD neuesfeld1 INT NOT NULL ,
          ADD neuesfeld2 INT NOT NULL ,
          ADD neuesfeld3 INT NOT NULL ;

          ALTER TABLE tabelle
          CHANGE neuesfeld1 umbenannt INT( 11 ) DEFAULT '0' NOT NULL ,
          CHANGE neuesfeld2 neuesfeld2 TIMESTAMP DEFAULT '0' NOT NULL ,
          CHANGE neuesfeld3 neuesfeld3 INT( 11 ) DEFAULT '0';

          ALTER TABLE tabelle
            DROP umbenannt,
            DROP neuesfeld2,
            DROP neuesfeld3;

          
          >   
          > jetzt zufrieden?  
          >   
          > MfG