MySQL修改数据库名称

MySQL修改数据库名称比较麻烦,不支持直接修改,需要通过其他方式间接达到修改数据库名称的目的,整理了一下,大致有如下几种方式。

方法一:通过修改表名称,间接实现修改数据库名称(推荐)

比如数据库名称db_old 想改名为 db_new。

(1)先创建新库:
create database db_new;

(2)修改表名,将表移动到新库里:
rename table db_old.tb to db_new.tb;

如果库里有很多表,就要写一个脚本,批量执行。

(3)最后删除旧库:
drop database db_old;

附上一个shell脚本批量修改表名称。

#!/bin/bash
# 假设将db_old数据库名改为db_new
mysql -h127.0.0.1 -uadmin -p'123456' -e 'create database if not exists db_new'
list_table=$(mysql -h127.0.0.1 -uadmin -p'123456' -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='db_old'")
for table in $list_table
do
    mysql -h127.0.0.1 -uadmin -p'123456' -e "rename table db_old.$table to db_new.$table"
done

方法二:先导出数据,再导入数据。

(1)使用mysqldump导出数据:
mysqldump -h127.0.0.1 -uadmin -p’123456′ –set-gtid-purged=OFF db_old > db_old.sql

MySQL 5.7 导出数据加上参数–set-gtid-purged=OFF

(2)导入数据到新库:
mysql -h127.0.0.1 -uadmin -p’123456′ db_new < db_old.sql

其他不推荐的方法:

MyQL 5.1版本rename database语法

5.1.7到5.1.23版本支持 rename database语法,显然5.1版本已经没什么人用了,这个方法了解一下就好,不推荐使用。
rename database db_old to db_new;

myisam引擎直接修改目录名称

对于myisam引擎的表,直接修改数据目录下的数据库目录名称,现在myisam表也很少有人用了,也不推荐使用。

发表评论