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

Posted

技术标签:

【中文标题】从现有数据库创建一个新的 MySQL 数据库,每个表最多包含 10000 行数据【英文标题】:Create a new MySQL Database from existing db with up to 10000 rows of data from each table 【发布时间】:2015-10-23 00:13:15 【问题描述】:

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

我想我可以使用存储过程循环遍历所有表并手动创建每个表并仅插入 10000 行。

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

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

然后我这样称呼它 CALL createNewDatabase('baseTable', 'newTable');

但是我运行程序我得到以下错误

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

如果我在准备语句之前添加以下两行

SELECT @str;
LEAVE my_loop;

如果我手动执行它们,我会得到以下查询

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;

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

【问题讨论】:

【参考方案1】:

引用 mysql 在PREPARE 上的文档:

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

您正在尝试执行删除表和创建表语句,在 1 个准备好的语句中插入记录,这是不允许的。为 3 个命令准备 3 个单独的语句。

【讨论】:

以上是关于从现有数据库创建一个新的 MySQL 数据库,每个表最多包含 10000 行数据的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas从现有数据帧的所有行组合创建新的数据帧

从现有 MySQL 数据库生成 ER 图,为 CakePHP 创建 [关闭]

如何将现有 MySQL 数据库的表复制到没有记录的新数据库?

如何为mysql中的现有表创建索引?

向MYSQL数据库中的现有表增加新的字段(列)

需要一种从现有数据框创建熊猫数据框的方法