首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从现有数据库创建新的MySQL数据库,每个表中最多包含10000行数据

从现有数据库创建新的MySQL数据库,每个表中最多包含10000行数据
EN

Stack Overflow用户
提问于 2015-10-23 08:13:16
回答 1查看 53关注 0票数 1

我正在尝试创建一个包含部分数据而不是全部数据的数据库。我不需要1M+记录来做我需要的事情,所以我只需要10000行就可以了。

我想我可以使用一个存储过程遍历所有的表,手动创建每个表并只插入10000行。

我创建了一个这样的存储过程

代码语言:javascript
复制
CREATE DEFINER=`root`@`10.%` PROCEDURE `createNewDatabase`(in db_name varchar(100), in new_db_name varchar(100))
BEGIN

    DECLARE finish INT DEFAULT 0;
    DECLARE tbl VARCHAR(100);
    DECLARE cur_tables CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = db_name AND TABLE_TYPE='BASE TABLE';

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finish = 1;

    OPEN cur_tables;

    my_loop: LOOP

        FETCH cur_tables INTO tbl;

            IF finish = 1 THEN
                LEAVE my_loop;
            END IF;

            SET @str = CONCAT('DROP TABLE IF EXISTS `', new_db_name, '`.`' , tbl , '`; CREATE TABLE `', new_db_name, '`.`' , tbl , '` LIKE `', db_name , '`.`', tbl,'`; INSERT INTO `', new_db_name , '`.`' , tbl, '` SELECT * FROM `', db_name ,'`.`', tbl , '` LIMIT 10000;');


            PREPARE stmt FROM @str;
            EXECUTE stmt;

            DEALLOCATE PREPARE stmt;

        END LOOP;

    CLOSE cur_tables;

END

然后我这样调用它,调用createNewDatabase('baseTable','newTable');

但是我运行了这个过程,得到了以下错误

代码语言:javascript
复制
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CREATE TABLE `newTable`.`account_addresses` LIKE `baseTable`.`account_addres' at line 1

如果我在prepare语句之前添加了以下两行

代码语言:javascript
复制
SELECT @str;
LEAVE my_loop;

我得到了以下查询,如果我手动执行它们,这些查询可以正常工作

代码语言:javascript
复制
DROP TABLE IF EXISTS `newTable`.`account_addresses`; 
CREATE TABLE `newTable`.`account_addresses` LIKE `baseTable`.`account_addresses`; 
INSERT INTO `newTable`.`account_addresses` SELECT * FROM `newTable`.`account_addresses` LIMIT 10000;

CREATE TABLE `newTable`.`account_addresses` LIKE `baseTable`.`account_addresses`; INSERT INTO `newTable`.`account_addresses` SELECT * FROM `baseTable`.`account_addresses` LIMIT 10000;

我在这里做错了什么?为什么它会出错?

EN

回答 1

Stack Overflow用户

发布于 2015-10-23 08:44:25

引用mysql关于PREPARE的文档

文本必须表示单个语句,而不是多个语句。

您正在尝试执行drop table和create table语句,在%1准备好的语句中插入记录,但这是不允许的。对于这3个命令有3个单独的预准备语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33292881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档