MySQL手册中有介绍。
通常我只是转储数据库并用一个新名称重新导入它。这不是非常大的数据库的一个选项。重命名数据库| SCHEMA} db_name TO new_db_name做坏事,只存在于少数版本中,总的来说是个坏主意。
这需要与InnoDB一起工作,InnoDB存储的东西与MyISAM非常不同。
MySQL手册中有介绍。
通常我只是转储数据库并用一个新名称重新导入它。这不是非常大的数据库的一个选项。重命名数据库| SCHEMA} db_name TO new_db_name做坏事,只存在于少数版本中,总的来说是个坏主意。
这需要与InnoDB一起工作,InnoDB存储的东西与MyISAM非常不同。
当前回答
可以将一个数据库中的所有表重命名为另一个数据库下的所有表,而不必执行完整的转储和恢复。
DROP PROCEDURE IF EXISTS mysql.rename_db; DELIMITER || CREATE PROCEDURE mysql.rename_db(IN old_db VARCHAR(100), IN new_db VARCHAR(100)) BEGIN SELECT CONCAT('CREATE DATABASE ', new_db, ';') `# create new database`; SELECT CONCAT('RENAME TABLE `', old_db, '`.`', table_name, '` TO `', new_db, '`.`', table_name, '`;') `# alter table` FROM information_schema.tables WHERE table_schema = old_db; SELECT CONCAT('DROP DATABASE `', old_db, '`;') `# drop old database`; END|| DELIMITER ; $ time mysql -uroot -e "call mysql.rename_db('db1', 'db2');" | mysql -uroot
然而,目标db中的任何触发器都不会开心。您需要先删除它们,然后在重命名后重新创建它们。
mysql -uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot ERROR 1435 (HY000) at line 4: Trigger in wrong schema
其他回答
这适用于所有数据库,通过使用maatkit mysql工具包重命名每个表
使用mk-find打印并重命名每个表。手册页有更多选项和示例
mk-find --dblike OLD_DATABASE --print --exec "RENAME TABLE %D.%N TO NEW_DATABASE.%N"
如果您安装了maatkit(这非常简单),那么这是最简单的方法。
MySQL目前不支持通过其命令界面重命名数据库,但如果您可以访问MySQL存储数据库的目录,则可以重命名数据库。对于默认的MySQL安装,它通常在MySQL安装目录下的Data目录中。在Data目录下找到要重命名的数据库的名称并重命名它。不过,重命名目录可能会导致一些权限问题。请注意。
注意:在重命名数据库之前,必须停止MySQL
我建议创建一个新数据库(使用您想要的名称),并将所需的数据从旧数据库导出/导入到新数据库。很简单。
UPDATE `db`SET Db = 'new_db_name' where Db = 'old_db_name';
为了方便起见,下面是一个小shell脚本,必须使用两个参数执行:db-name和new db-name。
如果您不使用主目录中的.my.cnf文件,则可能需要在mysql行中添加登录参数。请在执行此脚本之前进行备份。
#!/usr/bin/env bash
mysql -e "CREATE DATABASE $2 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
for i in $(mysql -Ns $1 -e "show tables");do
echo "$1.$i -> $2.$i"
mysql -e "rename TABLE $1.$i to $2.$i"
done
mysql -e "DROP DATABASE $1"
有两种方法。
重命名表old_db。table_name TO new_db.table_name; Goto操作->在那里你可以看到表选项卡。你可以在这里编辑表名。