1

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

我需要在 c# 中单击按钮来完成它。所以我认为一个 sql 查询或存储过程将适合这样做,而不是 mysqldump。

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

如果已经存在解决方案,请指导我。

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

4

2 回答 2

1

获取整个数据库的数据 - SqlFiddle Demo

只获取一张表的数据 - - SqlFiddle Demo

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

这是一个具有复杂编码的复杂过程,尤其是通过复杂连接将所有列的所有行提取到单个结果中的查询group_concat

需要它简化、高效且适用于所有场景。

我的解决方案的一些细节:以下是重要部分,其他只是条件/循环(我对文档不方便,也需要时间和建议,有人可能会帮助我格式化和改进,抱歉给您带来不便,但我会很高兴得到你和我的任何帮助)

注意: group_concat(yourColumn separator ' --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.1concat(",@cns2,")获取单个列中所有列的值。

5.2 在最外层 concat 现在 @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);
于 2012-09-24T20:26:10.370 回答
0
select concat("insert into users (id,name,password) values ('",id,"'"), 
concat(",'",username,"'"),
concat(",'",password,"'),") INTO OUTFILE 'c:\\datas\\asd.txt' from users
于 2012-09-23T22:23:36.773 回答