還有一個選項可以完成所有工作(在mysql
本身的單個調用中),但它可能永遠不會嘗試。
在致敬H.P.洛夫克拉夫特(以及基於Anuya的stored procedure to create INSERT statements)這裏是的存儲過程,而不能說是:
注:這聖潔,神祕的存儲過程只能由一個瘋子來運行,並呈現以下純粹是爲了教育目的。
DELIMITER $$
DROP PROCEDURE IF EXISTS `pseudoDump` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pseudoDump`(
in_db varchar(20),
in_tables varchar(200),
in_data_tables varchar(200)
)
BEGIN
DECLARE Whrs varchar(500);
DECLARE Sels varchar(500);
DECLARE Inserts varchar(200);
DECLARE tablename varchar(20);
DECLARE ColName varchar(20);
SELECT `information_schema`.`TABLE_NAME` INTO tablename FROM TABLES WHERE TABLE_SCHEMA = in_db AND TABLE_NAME IN (in_tables);
tabdumploop: LOOP
SHOW CREATE TABLE tablename;
LEAVE tabdumploop;
END LOOP tabdumploop;
SELECT `information_schema`.`TABLE_NAME` INTO tablename FROM TABLES WHERE TABLE_SCHEMA = in_db ;
datdumploop: LOOP
SELECT group_concat(concat('concat(\'"\',','ifnull(',column_name,','''')',',\'"\')')) INTO @Sels from `information_schema`.`COLUMNS` where table_schema=in_db and table_name=tablename;
SELECT group_concat('`',column_name,'`') INTO @Whrs from `information_schema`.`COLUMNS` where table_schema=in_db and table_name=tablename;
SET @Inserts=concat("select concat('insert IGNORE into ", in_db,".",tablename," values(',concat_ws(',',",@Sels,"),');') as MyColumn from ", in_db,".",tablename, " where 1 group by ",@Whrs, ";");
PREPARE Inserts FROM @Inserts;
EXECUTE Inserts;
LEAVE datdumploop;
END LOOP datdumploop;
END $$
DELIMITER ;
......幸運的是,我是從目睹靈魂痛苦的恐怖這個過程必須由MySQL Bug #44009發泄肯定得救
注:你不能帶*號多用 - 忽略表*數據庫。您可能會認爲,因爲您在交換機中指定了數據庫和表,您可以在多數據庫轉儲中使用它,但您會得到「無法找到表」 – 2013-05-22 21:53:38