小写数据库中的所有表名?

时间:2012-01-06 14:49:33

标签: mysql

我有一个mysql数据库,大约有8个表都以大写字母开头。有什么快速的方法将它们全部小写?或者甚至一个接一个......如果我试试这个,RENAME TABLE Contacts TO contacts它会说ERROR 1050 (42S01): Table 'contacts' already exists

3 个答案:

答案 0 :(得分:4)

使用两个重命名 - 首先是临时名称,然后是小写:

RENAME TABLE Contacts TO contacts_

然后

RENAME TABLE contacts_ TO contacts

当然,您应该小心不要尝试使用现有的表名,但如果您最初使用表'Contacts'和'contacts_',我会说您遇到的问题比案例更严重。

答案 1 :(得分:0)

选中此link,您必须:

RENAME TABLE tbl_name TO new_tbl_name
  

new_tbl_name 必须 NOT 才能被其他表使用,因为名称必须唯一

答案 2 :(得分: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