修改数据库的名字

本文详细介绍如何在 SQL Server 中更改数据库名称,包括修改数据库名、逻辑文件名和物理文件名等步骤。提供了完整的 T-SQL 脚本示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
该脚本示例如何完整的修改一个数据库的名称.
数据为原名称为DB_BEIJING,需要修改成DB_SHANGHAI
perfectaction 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. 使用 `mysqldump` 工具导出当前数据库的内容到一个 SQL 文件中。 ```bash mysqldump -u username -p old_database_name > dump.sql ``` 2. 编辑生成的 SQL 文件,将所有的 `old_database_name` 替换为新的数据库名称 `new_database_name`。 3. 创建一个新的数据库: ```sql CREATE DATABASE new_database_name; ``` 4. 将编辑后的 SQL 文件重新导入到新创建的数据库中: ```bash mysql -u username -p new_database_name < dump.sql ``` 此方法的优点在于它能够保留所有表之间的外键约束以及数据完整性[^1]。 --- #### 方法二:手动迁移表结构和数据 对于较大的数据库或者无法使用外部工具的情况,可以采用以下方式逐一手动迁移表及其数据: 1. **创建目标数据库** ```sql CREATE DATABASE IF NOT EXISTS new_database_name; ``` 2. **逐一复制表结构** 遍历源数据库中的每张表,并将其定义迁移到新数据库中。可以通过以下语句获取表定义: ```sql SHOW CREATE TABLE old_database_name.table_name; ``` 然后将返回的结果稍作调整(主要是指定目标数据库),再运行以创建对应的新表。 3. **插入原始数据至新表** 对于每一项已存在的记录,利用 `INSERT INTO ... SELECT FROM` 的形式完成转移工作: ```sql INSERT INTO new_database_name.table_name (columns...) SELECT columns... FROM old_database_name.table_name; ``` 注意,在这个过程中需特别留意那些涉及外键参照的部分,确保它们被适当地处理以免引发错误或丢失链接信息[^3]。 --- #### 方法三:针对特定版本特性优化方案 虽然标准做法如前述两种较为通用可靠,但在某些特殊情况下也可以考虑一些基于MySQL内部机制的小技巧。不过需要注意的是这类手段往往具有较高的风险性和局限性,仅推荐给熟悉底层原理且清楚自己所做之事的人士尝试。 例如,在支持在线DDL变更的一些现代MYSQL发行版里(比如8.x系列),理论上我们或许能借助临时切换默认存储引擎等方式间接达成目的;然而由于过程复杂度较高加上潜在兼容隐患等因素影响,这里不再展开赘述[^2]。 --- ```python # Python脚本示例用于自动化部分重复劳动 import pymysql def migrate_tables(source_db, target_db): connection = pymysql.connect(host='localhost', user='your_username', password='your_password') try: with connection.cursor() as cursor: # 获取source_db下的所有表格列表 cursor.execute(f"USE {source_db}") tables_result = cursor.execute("SHOW TABLES;") table_names = [row[0] for row in cursor.fetchall()] for tbl in table_names: create_stmt = f"SHOW CREATE TABLE `{tbl}`;" cursor.execute(create_stmt) _, ddl_query = cursor.fetchone() altered_ddl = ddl_query.replace(source_db + '.', '') final_create_sql = f"{altered_ddl} COMMENT 'Migrated from {source_db}'" drop_if_exists = f"DROP TABLE IF EXISTS `{target_db}`.`{tbl}`;" use_target = f"USE `{target_db}`;" cursor.execute(drop_if_exists) cursor.execute(use_target) cursor.execute(final_create_sql) copy_data_cmd = ( f"INSERT INTO `{target_db}`.`{tbl}` " f"(SELECT * FROM `{source_db}`.`{tbl}`);" ) cursor.execute(copy_data_cmd) finally: connection.close() migrate_tables('original_db', 'renamed_db') ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值