2012-01-06 15 views
5

Ho un database mysql con circa 8 tabelle che iniziano tutte con una lettera maiuscola. Qualche modo veloce per metterli in minuscolo? O anche uno per uno ... se provo questo, RENAME TABLE Contacts TO contacts si dice ERROR 1050 (42S01): Table 'contacts' already existsIn lettere minuscole tutti i nomi delle tabelle in un database?

+4

La prima cosa che viene in mente - usare due rinomina per ogni tabella, cioè .: 'RENAME TABLE contatti per contacts_' poi' RENAME TABLE CONTATTI_ PER contacts' Non so di una soluzione migliore. Ad ogni modo, qual è il punto di questo? A MySQL non interessa se selezioni da contatti, Contatti, CoNTactS, ecc. – Nikoloff

+0

Quale sistema operativo, per curiosità? * ["La distinzione tra maiuscole e minuscole del sistema operativo sottostante ha un ruolo nella distinzione tra maiuscole e minuscole dei nomi di database, tabelle e trigger."] (Http://dev.mysql.com/doc/refman/5.5/en/identifier- case-sensitivity.html) * – pilcrow

+0

@Nikoloff Buona idea, ha funzionato. E se lo uso con Ruby on Rails, il naming importa –

risposta

4

Usa due rinomina - prima a un nome temporaneo e quindi alla caratteri minuscoli:

RENAME TABLE Contacts TO contacts_ 

e poi

RENAME TABLE contacts_ TO contacts 

Naturalmente, si deve fare attenzione a non provare a utilizzare un nome di tabella già esistente, ma se inizialmente avevi tabelle "Contatti" e "contatti", direi che hai problemi più seri del caso.

+0

Questo potrebbe essere un buon caso per una stored procedure che lo fa in un colpo solo ci sono molti tavoli – Nick

0

Selezionando questa link, è necessario:

RENAME TABLE tbl_name TO new_tbl_name 

MA: Il new_tbl_name deve NON essere utilizzato da un altro tavolo come il nome deve essere unico

0

Mi dispiace per aver riportato un vecchio post. Ma ho avuto problemi anche con questo. Ho fatto questa funzione per automatizzare quanto sopra. Non ho aiutato nel mio caso, ma potrebbe aiutare altre persone. Ecco perché lo sto postando qui.

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `lowercasetables`() 
BEGIN 
    DECLARE done INT DEFAULT 0; 
    DECLARE tempname varchar(255); 
    DECLARE backupname varchar(255); 
    DECLARE sqlst varchar(5000); 
    DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.TABLES where table_schema = schema(); 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

    OPEN cur1; 

    REPEAT 
     FETCH cur1 INTO tempname;   
     SET backupname = concat(tempname,'_BACKUP'); 

     SET @sqlst = CONCAT(CONCAT('RENAME TABLE ', tempname), CONCAT(' TO ', backupname)); 
     PREPARE stmt1 FROM @sqlst; 
     EXECUTE stmt1; 
     DEALLOCATE PREPARE stmt1; 

     SET @sqlst = CONCAT(CONCAT('RENAME TABLE ', backupname), CONCAT(' TO ', LOWER(tempname))); 
     PREPARE stmt2 FROM @sqlst; 
     EXECUTE stmt2; 
     DEALLOCATE PREPARE stmt2; 

    UNTIL done END REPEAT; 

    CLOSE cur1; 

END 
+0

Prova a postare questa domanda come una domanda diversa oppure modifica la tua domanda se non ricevi alcuna risposta. – Gapchoos

Problemi correlati