mysql 复制存储过程,mysql的存储过程-数据库的复制

当前位置:我的异常网» 数据库 » mysql的存储过程-数据库的复制

mysql的存储过程-数据库的复制

www.myexceptions.net  网友分享于:2013-03-18  浏览:0次

mysql的存储过程---数据库的复制

DELIMITER $$

USE `bjcmdb`$$

DROP PROCEDURE IF EXISTS `pro_database_backup`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `pro_database_backup`(IN databaseName CHAR(40))

BEGIN

##定义变量

DECLARE   tableName VARCHAR(40);

DECLARE   oldtableName VARCHAR(40);

DECLARE   newtableName VARCHAR(40);

DECLARE   cur_stop INT DEFAULT 0;

##首先这里对游标进行定义

DECLARE  cur_tableName CURSOR FOR   SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'bjcmdb' AND TABLE_NAME NOT IN ('c_basisline');

##这个是个条件处理,针对SQLSTATE '02000'的条件

DECLARE  CONTINUE HANDLER FOR SQLSTATE '02000'  SET  cur_stop = NULL;

##创建数据库

SET @createDatabaseSql :=CONCAT("create database ",databaseName,";");

PREPARE STMT FROM @createDatabaseSql;

EXECUTE STMT;

## 格式化数据库名称

SET databaseName=CONCAT(databaseName,".");

## 开启游标

OPEN cur_tableName;

/*游标向下走一步,将查询出来的值付给定义的变量*/

FETCH cur_tableName INTO tableName;

##直到查询结果为空时结束遍历

WHILE ( cur_stop IS NOT NULL) DO

##赋表名

SET oldtableName=CONCAT('bjcmdb.',tableName);

SET newtableName=CONCAT(databaseName,tableName);

##创建表,包括表结构和索引

SET @createsql :=CONCAT("CREATE TABLE ",newtableName," LIKE ",oldtableName,";");

PREPARE STMT FROM @createsql;

EXECUTE STMT;

##复制数据到指定库的表

SET @insertsql :=CONCAT("INSERT INTO ",newtableName," SELECT * FROM ",oldtableName,";");

##SELECT  @insertsql;

PREPARE STMT FROM @insertsql;

EXECUTE STMT;

FETCH cur_tableName INTO tableName;

END WHILE;

CLOSE cur_tableName;

END$$

DELIMITER ;

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值