MySQL Clone database schema

Neste artigo descobri uma forma de criar tabelas que dá muito jeito:

CREATE TABLE newtable LIKE mytable;

Pensei que devia existir algo equivalente para copiar as definições de uma base de dados inteira, mas aparentemente não existe.
A forma mais fácil de conseguir o mesmo resultado é provavelmente usar o mysqldump com a seguinte opção:

--no-data

No entanto, já há bastante tempo que queria experimentar os stored procedures do MySQL, por isso aproveitei a oportunidade para escrever o meu primeiro:

delimiter //
DROP PROCEDURE IF EXISTS copySchema //
CREATE PROCEDURE copySchema(IN schemaname CHAR(64))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE table_a CHAR(64) default 'testing';
DECLARE cur1 CURSOR FOR SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA = schemaname;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO table_a;
IF NOT done THEN
SELECT CONCAT('CREATE TABLE ', table_a, ' LIKE ', schemaname, '.', table_a) into @sqlstr;
PREPARE stmt FROM @sqlstr;
EXECUTE stmt;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
END
//
delimiter ;

CALL mydb.copySchema('mysql');

Referências:

Share