Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta SQL de backup de banco de dados


Para obter dados de todo o banco de dados - SqlFiddle Demo

Para obter dados de apenas uma tabela - - SqlFiddle Demo



Eu fiz uma solução complexa, mas aceitável. Mas precisa melhorar .

Este é um procedimento complexo com codificação complexa, especialmente a consulta que busca todas as linhas de todas as colunas em um único resultado por group_concat e formatos com uma concatenação complexa.

Necessário simplificado, eficiente e funcionando em todos os cenários.

Alguns detalhes da minha solução :A seguir está a parte importante, outras são apenas condições/Looping (não sou habilidoso com documentação também precisa de tempo e sugestões, alguém pode me ajudar em sua formatação e melhoria, Desculpe por qualquer inconveniente, no entanto ficarei feliz por qualquer ajuda de você e de mim)

Nota:group_concat(yourColumn separator ' --anySeparator-- ') está mesclando todas as linhas de sua coluna como uma de tal forma que as linhas são separadas por --anySeparator--
select group_concat(column_name separator '`,`') into @cns1 from
information_schema.columns where table_schema=dn and [email protected];

1 :column_names são obtidos como um único valor separado por
`,` => @cs1 = id`,`ename`,`did

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

2 :column_names são obtidos como um único valor separado por
`','` => @cn2  = id`','`ename`','`did

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

3:A letra ausente (`) é colocada no início e no final dos nomes das colunas
set @res=concat(@res," insert into ",@tn,"(",@cns1,") values ('");

4:Simplesmente faz res= " insert into emp( `id` , `ename` , `did` ) values(" Aqui você pode ver por que coloquei separadores (a formatação do MySql é alcançada)
set @temp := '';
set @q := concat("select group_concat(concat(",@cns2,") separator \"'),('\")
 from ",dn,".",@tn, " into @temp");

Acima está a declaração mais importante Ele obtém todas as linhas de dados da tabela como linhas de uma única coluna e, além disso, essas linhas são mescladas sendo separadas por '),('

5.1 concat(",@cns2,") obtém valores de todas as colunas em uma única.

5.2 Após a concatação mais externa agora @q é
 @q = "select group_concat(`id`','`ename`','`,did` separator '),(' from 
mydb.emp into @temp";

5.3 :group_concat irá mesclar todas as linhas dessa coluna combinada em um valor. Os valores das colunas serão unidos através de separadores existentes em @cns2 e a junção no nível das linhas será com '),('
prepare s1 from @q;
execute s1;deallocate prepare s1;
set @res = concat(@res,@temp,");");    

@q é executado
set @res = concat(@res,@temp,");");

6:E vamos obter resultado como
 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

E depois de @res = concat(@res,@temp,");"); Nós temos
 insert into emp(`id`,`ename`,`did`) values ('1','e1','4'),('2','e2','4'),
('3','e3','2'),('4','e4','4'),('5','e5','3);