修改数据库名称(如何完整的修改一个数据库的名称)
大家好,感谢邀请,今天来为大家分享一下修改数据库名称的问题,以及和如何完整的修改一个数据库的名称的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
怎样在mysql里面修改数据库名称
常见的主要有三种方法:
如果所有表都是MyISAM类型的话,可以直接修改文件夹的名字。
关闭mysql→把data目录中的db_name目录重命名为new_db_name→开启mysql
新建数据库,在新的数据库里重命名所有旧数据库中的表,再删除旧的数据库。具体操作命令如下:创建新的数据库→重命名数据表名称→删除旧的数据库。
CREATE DATABASE new_db_name;
RENAME TABLE db_name.table1 TO new_db_name.table1,db_name.table2 TO new_db_name.table2;
DROP DATABASE db_name;
利用mysqldump命令从旧的数据导出数据,再导入新数据库。具体操作命令如下:导出数据→创建新的数据库→导入数据→删除旧的数据库。
mysqldump-u root-p-h ip db_name> db_name_dump.SQL
mysql-u root-p-h ip-e“CREATE DATABASE new_db_name”
mysql-u root-p-h ip new_db_name< db_name_dump.SQL
mysql-u root-p-h ip-e“DROP DATABASE db_name”
如何完整的修改一个数据库的名称
/*
该脚本示例如何完整的修改一个数据库的名称.
数据库为原名称为DB_BEIJING,需要修改成DB_SHANGHAI
nzperfect 2012.12.19
*/
--判断是否存在同名的数据库,以防止误删除
USE master
GO
IF EXISTS(SELECT name FROM sys.databases WHERE name= N'DB_BEIJING')
BEGIN
RAISERROR('请注意:数据库已存在!',15,1)
RETURN
--DROP DATABASE DB_BEIJING
END
GO
USE master
GO
--创建测试数库
CREATE DATABASE [DB_BEIJING]
ON PRIMARY
(
NAME= N'DB_BEIJING',
FILENAME= N'X:\DATA\DB_BEIJING.mdf',
SIZE= 3072KB,
FILEGROWTH= 1024KB
)
LOG ON
(
NAME= N'DB_BEIJING_log',
FILENAME= N'W:\Log\DB_BEIJING_log.ldf',
SIZE= 1024KB,
FILEGROWTH= 1024KB
)
GO
--以下为修改过程
--step 1:修改数据库名称
USE master
GO
ALTER DATABASE DB_BEIJING SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
EXEC master..sp_renamedb'DB_BEIJING','DB_SHANGHAI'
GO
ALTER DATABASE DB_SHANGHAI SET MULTI_USER
GO
--step 2:查看修改名称后的数据库逻辑名及物理文件名
USE master
GO
SELECT name AS [Logical Name], physical_name AS [DB File Path],type_desc AS [File Type],
state_desc AS [State] FROM sys.master_files
WHERE database_id= DB_ID(N'DB_SHANGHAI')
GO
/*
Logical Name DB File Path File Type State
DB_BEIJING X:\DATA\DB_BEIJING.mdf ROWS ONLINE
DB_BEIJING_log W:\Log\DB_BEIJING_log.ldf LOG ONLINE
*/
--step 3:修改数据库逻辑文件名称
USE master
GO
ALTER DATABASE DB_SHANGHAI SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE DB_SHANGHAI MODIFY FILE(NAME=N'DB_BEIJING', NEWNAME=N'DB_SHANGHAI')
GO
ALTER DATABASE DB_SHANGHAI MODIFY FILE(NAME=N'DB_BEIJING_log', NEWNAME=N'DB_SHANGHAI_log')
GO
ALTER DATABASE DB_SHANGHAI SET MULTI_USER
GO
--step 4:修改数据库物理文件名称之前先打开xp_cmdshell支持
USE master
GO
sp_configure'show advanced options',1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_configure'xp_cmdshell', 1
GO
RECONFIGURE WITH OVERRIDE
GO
--step 5:重命名数据库物理文件名称
USE [master]
GO
ALTER DATABASE DB_SHANGHAI SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
EXEC xp_cmdshell'RENAME"X:\DATA\DB_BEIJING.mdf","DB_SHANGHAI.mdf"'
GO
EXEC xp_cmdshell'RENAME"W:\Log\DB_BEIJING_log.ldf","DB_SHANGHAI_log.ldf"'
GO
--step 6:将数据库逻辑名称指向新的物理文件,并将数据库online
USE [master]
GO
ALTER DATABASE DB_SHANGHAI MODIFY FILE(NAME=DB_SHANGHAI, FILENAME='X:\DATA\DB_SHANGHAI.mdf')
GO
ALTER DATABASE DB_SHANGHAI MODIFY FILE(NAME=DB_SHANGHAI_log, FILENAME='W:\LOG\DB_SHANGHAI_log.ldf')
GO
ALTER DATABASE DB_SHANGHAI SET ONLINE
--step 7:查看全部修改完成后的数据库情况
USE master
GO
SELECT name AS [Logical Name], physical_name AS [DB File Path],type_desc AS [File Type],
state_desc AS [State] FROM sys.master_files
WHERE database_id= DB_ID(N'DB_SHANGHAI')
GO
/*
Logical Name DB File Path File Type State
DB_SHANGHAI X:\DATA\DB_SHANGHAI.mdf ROWS ONLINE
DB_SHANGHAI_log W:\LOG\DB_SHANGHAI_log.ldf LOG ONLINE
*/
--step 8:关闭xp_cmdshell支持
USE master
GO
sp_configure'xp_cmdshell', 0
GO
RECONFIGURE WITH OVERRIDE
GO
sp_configure'show advanced options',0
GO
RECONFIGURE WITH OVERRIDE
GO
如何修改MySQL数据库名称
修改MySQL数据库名称的方法如下:
1.语句修改法:
RENAME DATABASE db_name TO new_db_name
这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。
2.如果所有表都是MyISAM类型的话,可以改文件夹的名字
把data目录中的db_name目录重命名为new_db_name
3.重命名所有的表
代码如下:
4. mysqldump导出数据再导入
代码如下:
5.使用shell脚本重命名所有的表
代码如下:
我想修改mysql数据库的名字,可以怎么修改
被取消的命令MySQL之前提供了一个 rename database db_old to db_new的命令来直接对数据库改名,可能由于实现的功能不完备(比如,这条命令可能是一个超大的事务,或者是由于之前的表很多还是 MyISAM等),后来的版本直接取消了这条命令。更改数据库名大致上有以下几种方案:
一、mysqldump导入导出要说最简单的方法,就是直接用 mysqldump工具,在旧库导出再往新库导入(最原始、最慢、最容易想到)的方法:旧库 yttdb_old导出(包含的对象:表、视图、触发器、事件、存储过程、存储函数)
二、改整库的表名利用 MySQL更改表名的方法来批量把旧库的所有表依次遍历,改名为新库的表。这种方法比第一种要快很多倍,但是没有第一步操作起来那么顺滑,不能一步到位。比如,要把数据库 yttdb_old改名为 yttdb_new,如果数据库 yttdb_old里只有磁盘表,那很简单,直接改名即可。或者写个脚本来批量改,非常简单。但是一般旧库里不只有磁盘表,还包含其他各种对象。这时候可以先考虑把旧库的各种对象导出来,完了在逐一改完表名后导进去。
三、历史方案其实在 MySQL早期还有一种方法。假设 MySQL部署好了后,所有的 binlog都有备份,并且二进制日志格式还是 statement的话,那就可以简单搭建一台从机,让它慢慢追主机到新的库名,等确切要更改旧库的时候,再直接晋升从机为主机即可。这里只需要从机配置一个参数来把旧库指向为新库:replicate-rewrite-db=yttdb_old->yttdb_new不过这种局限性很大,不具备标准化,不推荐。
总结其实针对 MySQL本身改库名,大致就这么几种方法:
如果数据量小,推荐第一种;数据量大,则推荐第二种;数据量巨大,那就非 MySQL本身能解决的了。可通过部署第三方 ETL工具,通过解析 MySQL二进制日志或其他的方式来把旧库数据直接读取到新库达到改名的目的等等。如果你还想了解更多这方面的信息,记得收藏关注本站。