Mysql
 sql >> Database >  >> RDS >> Mysql

Query SQL di backup del database

Per ottenere i dati dell'intero database - SqlFiddle Demo

Per ottenere i dati di una sola tabella - - SqlFiddle Demo

Ho fatto una soluzione complessa ma accettabile. Ma necessita di miglioramenti .

Questa è una procedura complessa con una codifica complessa, in particolare la query che recupera tutte le righe di tutte le colonne in un unico risultato da group_concat e formati con una concatenazione complessa.

Necessità semplificata, efficiente e funzionante in tutti gli scenari.

Alcuni dettagli della mia soluzione :Di seguito è la parte importante, l'altra è solo condizioni/Looping (non sono a portata di mano con la documentazione inoltre ha bisogno di tempo e suggerimenti, qualcuno potrebbe aiutarmi nella sua formattazione e miglioramento, scusa per qualsiasi inconveniente, comunque sarò felice per qualsiasi aiuto da te e da me)

Nota:group_concat(yourColumn separator ' --anySeparator-- ') sta unendo tutte le righe della tua colonna in modo tale che le righe siano separate da --anySeparator--

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

1 :i nomi_colonna sono ottenuti come un unico valore separato da

`,` => @cs1 = id`,`ename`,`did

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

2 :i nomi_colonna sono ottenuti come un unico valore separato da

`','` => @cn2  = id`','`ename`','`did

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

3:la lettera mancante (`) viene inserita all'inizio e alla fine dei nomi delle colonne

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

4:Basta inserire res= " insert into emp( `id` , `ename` , `did` ) values(" Qui puoi vedere perché ho inserito i separatori (la formattazione di MySql è stata raggiunta)

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

Qui sopra c'è l'affermazione più importante Ottiene tutte le righe di dati dalla tabella come righe di una singola colonna e inoltre queste righe vengono unite separate da '),('

5.1 concat(",@cns2,") ottiene i valori di tutte le colonne in una singola.

5.2 Dopo il più esterno concat ora @q è

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

5.3:group_concat unirà tutte le righe di quella colonna combinata in un unico valore. I valori delle colonne verranno uniti tramite separatori esistenti in @cns2 e l'unione a livello di righe sarà con '),('

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

@q viene eseguito

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

6:E otterremo il risultato come

 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 dopo @res = concat(@res,@temp,");"); otteniamo

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