码迷,mamicode.com
首页 > 数据库 > 详细

mysql数据库改名的三种方法

时间:2018-07-06 11:27:14      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:for   exists   rename   pad   lsp   container   name   comm   dbn   

前不久去面试,被问到Innodb引擎的表如何改数据库名,当时我也只回答了MyISAM改如何操作,被一些细节问题打败,真是操蛋。

如果表示MyISAM那么可以直接去到数据库目录mv就可以。

Innodb完全不行,自己测试过,会提示相关表不存在。

 

第一种方法:

1
RENAME database olddbname TO newdbname

这个是5.1.7到5.1.23版本可以用的,但是官方不推荐,会有丢失数据的危险

 

第二种方法:

1.创建需要改成新名的数据库。
2.mysqldum 导出要改名的数据库
3.删除原来的旧库(确定是否真的需要)
当然这种方法虽然安全,但是如果数据量大,会比较耗时,哎,当时连这种方法都没有想到,真有想死的冲动。

 

第三种方法:

我这里就用一个脚本,很简单,相信大家都看的懂

复制代码

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
# 假设将sakila数据库名改为new_sakila
# MyISAM直接更改数据库目录下的文件即可
mysql -uroot -p123456 -e ‘create database if not exists new_sakila‘
 
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA=‘sakila‘")
 
for table in $list_table
do
    mysql -uroot -p123456 -e "rename table sakila.$table to new_sakila.$table"
done

这里用到了rename table,改表名的命令,但是如果新表名后面加数据库名,就会将老数据库的表移动到新的数据库,所以,这种方法即安全,又快速。

 

实例配置:

 cat weifeng_rename.sh 
#!/bin/bash
# 假设将weifeng数据库名改为weifeng_test

mysql -uroot -p123456 -e create database if not exists weifeng_test
 
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA=‘weifeng‘")
 
for table in $list_table
do
    mysql -uroot -p123456 -e "rename table weifeng.$table to weifeng_test.$table"
done

 

mysql数据库改名的三种方法

标签:for   exists   rename   pad   lsp   container   name   comm   dbn   

原文地址:https://www.cnblogs.com/weifeng1463/p/9272214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!