2015-10-23 1 views
1

Я пытаюсь создать базу данных с некоторыми данными не все. Мне не нужны записи 1M +, чтобы делать то, что мне нужно, поэтому я в порядке с только 10000 строк.Создайте новую базу данных MySQL из существующего db с до 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 

Тогда я назвал его как этот ВЫЗОВ createNewDatabase ('baseTable', 'Новая_таблица');

Но я запустить процедуру, я получаю следующую ошибку

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 

если я добавил следующие 2 строк после как раз перед подготовить заявление

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; 

Что я здесь делаю неправильно? Почему это ошибка?

ответ

0

Цитата документации MySQL на PREPARE:

Текст должен представлять один оператор, а не множественные операторы.

Вы пытаетесь выполнить таблицу перетаскивания и инструкцию create table, вставить записи в 1 подготовленный оператор, и это не разрешено. Имейте 3 отдельных подготовленных оператора для 3 команд.

Смежные вопросы