1、rename database old_db to new_db:
mysql>rename database db1 to db2;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database db1 to db2' at line 1
注:这种方法会有丢失数据的危险,这条sql在MySQL 5.1.7的时候被添加进来,5.1.23的时候又被去掉
2、myisam:
1.1、MYISAM引擎把库名字对应的文件夹名改了
1.2、关闭mysqld
1.3、把data目录中的db_name目录重命名为new_db_name
1.4、打开mysqld
3、innodb:
3.1 按新名字建立一个数据库
3.2 删除原有库中所有表上的触发器
3.3 使用rename table命令将表从原数据库复制到新数据库
3.4 在新数据库上重新创建2.2中被删除的触发器
3.5 在新数据库上重新创建存储过程、自定义函数、Events等
rename table命令语法:
rename table old_db.table1 TO new_db.table1,old_db.table2 TO new_db.table2;
这种方法,如果表很多那就尴尬了,对于表很多的,可以使用以下脚本:
source /etc/profile #加载系统环境变量
source ~/.bash_profile #加载用户环境变量
set -o nounset #引用未初始化变量时退出
mysqlconn="mysql -h localhost -uroot -p123456"
#需要修改的数据库名
olddb="test1"
#修改后的数据库名
newdb="test2"
#创建新数据库
$mysqlconn -e "drop database if exists ${newdb};create database ${newdb};"
#获取所有表名
tables=$($mysqlconn -N -e "select table_name from information_schema.tables where table_schema='${olddb}'")
#修改表名
for name in $tables;do
$mysqlconn -e "rename table ${olddb}.${name} to ${newdb}.${name}"
done
#删除老的空库
#$mysqlconn -e "drop database ${olddb}"