2012-01-06 57 views
5

我有一個約8個表都以大寫字母開頭的MySQL數據庫。任何快速的方法來將它們全部小寫?甚至一個接一個......如果我試試這個,RENAME TABLE Contacts TO contacts它說ERROR 1050 (42S01): Table 'contacts' already exists小寫數據庫中的所有表名稱?

+4

想到的第一件事 - 爲每個表使用兩個重命名,即:'RENAME TABLE Con​​tacts Contacts_'然後'RENAME TABLE contacts_TO contacts'不知道更好的解決方案。無論如何,這是什麼意思? MySQL不關心你是否從聯繫人,聯繫人,CoNTactS等中選擇。 – Nikoloff 2012-01-06 14:53:48

+0

什麼操作系統,出於好奇? * [「底層操作系統的區分大小寫在數據庫,表名和觸發器名稱的區分大小寫中起作用。」](http://dev.mysql.com/doc/refman/5.5/en/identifier- case-sensitivity.html)* – pilcrow 2012-01-06 15:01:02

+0

@尼科洛夫好想法,工作。和即時通訊使用Ruby on Rails,命名事項 – 2012-01-06 15:05:53

回答

4

使用兩重命名 - 首先到一個臨時名稱,然後到小寫:

RENAME TABLE Contacts TO contacts_ 

然後

RENAME TABLE contacts_ TO contacts 

當然,你要小心,不要嘗試使用已經存在的表名,但如果你最初有表格'聯繫人'和'contacts_',我會說你遇到了比案例更嚴重的問題。

+0

這可能是一個很好的情況下存儲過程,它在一個鏡頭如果有很多表格。 – Nick 2012-01-06 17:56:13

0

選中此link,你必須:

RENAME TABLE tbl_name TO new_tbl_name 

但是:new_tbl_name必須NOT被另一個表作爲名稱必須是唯一

0

我很抱歉帶回一箇舊帖子。但我也有這個問題。 我做了這個功能來自動執行上述操作。我沒有幫助我的情況,但可能會幫助其他人。這就是我在這裏發佈的原因。

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

嘗試發佈此作爲一個不同的問題,否則修改你的問題,如果你沒有得到任何迴應。 – Gapchoos 2012-10-11 05:29:02

相關問題