严格意义上说,mysql5.6版本以后是不支持改库名的。我们可以通过rename table的方式,将表从一个库迁移到另一个库,变相完成改名。
方法1:将old_db库的对象迁移到new_db库
#查看old_db库的数据库对象
use information_schema;
select table_name from TABLES where TABLE_SCHEMA='old_db';
#创建新库
create database new_db;
#迁移到新库
rename table old_db.[table_name] to new_db.[table_name];
复制
方法2:存储过程改名
#改名语句
call manager_db.renamedb('old_db','new_db');
复制
执行操作前需要在数据库创建存储过程manager_db.renamedb,语句如下:
#创建库、日志表
create database if not exists manager_db;
create table if not exists manager_db.hz_log(id bigint not null auto_increment primary key ,start_time datetime,end_time datetime,log_text varchar(500));
#创建存储过程
DELIMITER //
CREATE PROCEDURE manager_db.renamedb(IN old_dbname VARCHAR(30),IN new_dbname VARCHAR(30))
BEGIN
DECLARE tab_name VARCHAR(50);
DECLARE done INT DEFAULT 0;
DECLARE msg VARCHAR(500) default '';
DECLARE cursor_tab CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema=old_dbname;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1 ;
OPEN cursor_tab;
SET @start_time=NOW();
SELECT COUNT(*) INTO @num_olddb FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = old_dbname;
IF @num_olddb=0 THEN
set msg=concat(msg,old_dbname ,' is not exists!!! 操作已经终止!-->');
SET done=1;
ELSE
SELECT COUNT(*) INTO @num_olddb_tab FROM information_schema.tables WHERE table_schema=old_dbname;
IF @num_olddb_tab=0 THEN
set msg=concat(msg, old_dbname ,' is empty!!! 操作告警! -->');
END IF;
SELECT COUNT(*) INTO @num_newdb FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = new_dbname;
IF @num_newdb=0 THEN
SET @stmt_cretedb=CONCAT("CREATE DATABASE ",new_dbname," CHARSET UTF8MB4 COLLATE UTF8MB4_GENERAL_CI;");
PREPARE stmt_cretedb FROM @stmt_cretedb;
EXECUTE stmt_cretedb;
set msg=concat(msg,new_dbname,' is created!-->');
DEALLOCATE PREPARE stmt_cretedb;
ELSE
SELECT COUNT(*) INTO @num_newdb_tab FROM information_schema.tables WHERE table_schema=new_dbname;
IF @num_newdb_tab>0 THEN
set msg=concat(msg ,new_dbname ,' is not empty!!! 操作已经终止!-->');
SET done=1;
END IF;
END IF;
END IF;
TABLE_LOOP:LOOP
FETCH cursor_tab INTO tab_name;
IF done THEN
IF @num_olddb>0 THEN
IF @num_olddb_tab>=0 THEN
SELECT COUNT(*) INTO @num_olddb_tab2 FROM information_schema.tables WHERE table_schema=old_dbname;
IF @num_olddb_tab2 =0 THEN
SET @stmt_dropdb=CONCAT("DROP DATABASE ",old_dbname,";");
PREPARE stmt_dropdb FROM @stmt_dropdb;
EXECUTE stmt_dropdb;
set msg=concat(msg,old_dbname,' is droped! -->');
DEALLOCATE PREPARE stmt_dropdb;
END IF;
END IF;
END IF;
LEAVE TABLE_LOOP;
END IF;
SET @stmt_renamedb=CONCAT("RENAME TABLE ",old_dbname,".",tab_name," TO ",new_dbname,".",tab_name);
PREPARE stmt_renamedb FROM @stmt_renamedb;
EXECUTE stmt_renamedb;
DEALLOCATE PREPARE stmt_renamedb;
END LOOP;
set msg=concat(msg,'rename db ',old_dbname,' to ',new_dbname,' is end');
INSERT INTO manager_db.hz_log(start_time,end_time,log_text) VALUES(@start_time,NOW(),msg);
DELETE FROM manager_db.hz_log WHERE start_time <= CURDATE() - INTERVAL 10 DAY;
CLOSE cursor_tab;
END//
DELIMITER ;
复制
最后修改时间:2023-05-21 17:31:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
赞👍
3月前

评论
相关阅读
墨天轮个人数说知识点合集
JiekeXu
440次阅读
2025-04-01 15:56:03
MySQL数据库当前和历史事务分析
听见风的声音
425次阅读
2025-04-01 08:47:17
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
387次阅读
2025-03-28 16:28:31
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
355次阅读
2025-04-25 15:30:58
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
354次阅读
2025-04-15 23:49:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
353次阅读
2025-04-17 17:02:24
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
329次阅读
2025-04-15 14:48:05
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
316次阅读
2025-04-25 18:53:11
云和恩墨杨明翰:安全生产系列之MySQL高危操作
墨天轮编辑部
307次阅读
2025-03-27 16:45:26
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
294次阅读
2025-04-07 12:14:29
TA的专栏
热门文章
mysql报错: The innodb_system data file 'ibdata1' must be writable
2023-05-25 4606浏览
手把手教你写一篇《MySQL数据库巡检报告》
2024-06-14 4314浏览
my2sql闪回工具-通过binlog实现MySQL误操作数据恢复
2023-05-22 3063浏览
[Xtrabackup] Found tables with row versions due to INSTANT ADD/DROP columns
2023-05-21 2203浏览
mysql IPv6双栈改造的一些经验和心得
2024-05-29 1823浏览
目录