我有一个mysql数据库,大约有8个表都以大写字母开头。有什么快速的方法将它们全部小写?或者甚至一个接一个......如果我试试这个,RENAME TABLE Contacts TO contacts
它会说ERROR 1050 (42S01): Table 'contacts' already exists
答案 0 :(得分:4)
使用两个重命名 - 首先是临时名称,然后是小写:
RENAME TABLE Contacts TO contacts_
然后
RENAME TABLE contacts_ TO contacts
当然,您应该小心不要尝试使用现有的表名,但如果您最初使用表'Contacts'和'contacts_',我会说您遇到的问题比案例更严重。
答案 1 :(得分:0)
答案 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