-- 创建新数据库
DROP DATABASE IF EXISTS `my_new_db`;
CREATE DATABASE my_new_db;
-- 使用老数据库
USE my_old_db;
-- 创建存储过程前先检查是否存在,存在就删除
DROP PROCEDURE IF EXISTS copy_tables_from_old_database;
-- 修改分隔符
DELIMITER //
-- 存储过程
CREATE PROCEDURE copy_tables_from_old_database(IN old_db VARCHAR(255), IN new_db VARCHAR(255))
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE table_name VARCHAR(255);
DECLARE cur CURSOR FOR SELECT t.table_name FROM information_schema.tables t WHERE table_schema = old_db;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO table_name;
IF done THEN
LEAVE read_loop;
END IF;
-- 创建新表
SET @create_table_stmt = CONCAT('CREATE TABLE ', new_db, '.', table_name, ' LIKE ', old_db, '.', table_name);
PREPARE stmt FROM @create_table_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 复制数据
SET @copy_data_stmt = CONCAT('INSERT INTO ', new_db, '.', table_name, ' SELECT * FROM ', old_db, '.', table_name);
PREPARE stmt FROM @copy_data_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
END //
-- 还原分隔符
DELIMITER ;
-- 执行存储过程
call copy_tables_from_old_database('my_old_db','my_new_db');
mysql 创建相同结构的数据库(不使用mysqldump)
于 2023-05-31 09:24:57 首次发布