数据库备份SQL查询

时间:2012-09-23 22:14:13

标签: mysql sql database-backups

我需要以插入语句的形式从数据库中获取数据以进行备份

我需要在c#中单击按钮才能执行此操作。所以我认为sql查询或存储过程适合这样做,而不是mysqldump。

其次我需要所有表格。而不是写表和列名称。它们应该从information_schema中获取,因为不需要为不同的scema更改查询

如果已有解决方案,请指导我。

更新:我已准备好解决方案,已发布,仍在寻找更好的解决方案。

2 个答案:

答案 0 :(得分:1)

To get Data of whole database - SqlFiddle Demo

To get data of only one table - - SqlFiddle Demo

我做了一个复杂但可接受的解决方案。 但需要改进

这是一个复杂的编码过程,尤其是查询,它通过group_concat将所有列的所有行提取到单个结果中,并使用复杂的连接进行格式化。

需要简化,高效并适用于所有情况。

我的解决方案的一些细节:以下是重要的部分,其他只是条件/循环(我不方便文档也需要时间和建议,有人可能会帮我格式化和如有任何不便,我们将竭诚为您提供帮助。

注意:group_concat(yourColumn分隔符'--anySeparator--')将列的所有行合并为一行,以便将行分隔为--anySeparator -

select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and table_name=@tn;

1:column_names作为由

分隔的单个值获得
`,` => @cs1 = id`,`ename`,`did

select group_concat(column_name separator '`,"\',\'",`') into @cns2
from information_schema.columns where table_schema=dn and table_name=@tn;

2:column_names作为由

分隔的单个值获得
`','` => @cn2  = id`','`ename`','`did

set @cns1=concat("`",@cns1,"`");    set @cns2=concat("`",@cns2,"`");

3:缺少字母(`)放在列名的开头和结尾

set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");

4:简单地让res= " insert into emp(`id` ,`ename` ,`did` ) values("在这里你可以看到我为什么要放置分隔符(MySql格式化实现了)

set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
 from ",dn,".",@tn, " into @temp");

以上是最关键的陈述它将表中的所有数据行作为单个列的行进行处理,并且这些行合并后由'),('

分隔

5.1 concat(",@cns2,")获取单个列中所有列的值。

5.2在外部最多连接之后,现在@q是

 @q = "select group_concat(`id`','`ename`','`,did` separator '),(' from 
mydb.emp into @temp";

5.3:group_concat会将该组合列的所有行合并为一个值。 列值将通过@ cns2中存在的分隔符连接,行级别连接将使用'),('

prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");    

执行@q

set @res = concat(@res,@temp,");");

6:我们将得到结果

 res was = insert into emp(`id`,`ename`,`did`) values ('
@temp = 1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3

我们得到@res = concat(@res,@temp,");");之后

 insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3);

答案 1 :(得分:0)

select concat("insert into users (id,name,password) values ('",id,"'"), 
concat(",'",username,"'"),
concat(",'",password,"'),") INTO OUTFILE 'c:\\datas\\asd.txt' from users