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

Database backup SQL Query

For at få data fra hele databasen - SqlFiddle Demo

For at få data for kun én tabel - - SqlFiddle Demo

Jeg har lavet en kompleks, men acceptabel løsning. Men trænger til forbedring .

Dette er en kompleks procedure med kompleks kodning, især forespørgslen, som henter alle rækker i alle kolonner til et enkelt resultat af group_concat og formater med en kompleks sammenkædning.

Har brug for det forenklet, effektivt og fungerende i alle scenarier.

Nogle detaljer om min løsning :Følgende er den vigtige del, andet er kun betingelser/sløjfer (jeg er ikke handy med dokumentation, også det har brug for tid og forslag, nogen kan hjælpe mig med dets formatering og forbedring, beklager ulejligheden, men jeg vil være glad for enhver hjælp fra dig og mig)

Bemærk:group_concat(yourColumn separator ' --anySeparator-- ') fletter alle rækker i din kolonne som en sådan, at rækker adskilles af --anySeparator--

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

1 :kolonnenavne fås som en enkelt værdi adskilt af

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

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

2 :kolonnenavne fås som en enkelt værdi adskilt af

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

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

3:Manglende bogstav (`) sættes i begyndelsen og slutningen af ​​kolonnenavne

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

4:Får simpelthen res= " insert into emp( `id` , `ename` , `did` ) values(" Her kan du se, hvorfor jeg har sat separatorer (MySql-formatering er opnået)

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

Ovenfor er det mest afgørende udsagn Den henter alle datarækker fra tabel som rækker i en enkelt kolonne, og yderligere flettes disse rækker adskilt af '),('

5.1 concat(",@cns2,") henter værdier for alle kolonner i en enkelt.

5.2 Efter ydre mest konkat er nu @q

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

5.3 :group_concat vil flette alle rækker i den kombinerede kolonne til én værdi. Kolonneværdier vil blive sammenføjet gennem separatorer, der findes i @cns2, og sammenføjning på rækkeniveau vil være med '),('

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

@q udføres

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

6:Og vi får resultatet som

 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

Og efter @res = concat(@res,@temp,");"); vi får

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


  1. MySQL:grupper efter dato RANGE?

  2. Forhindre InnoDB automatisk stigning PÅ DUPLIKAT NØGLE

  3. Har brug for php pdo implode arrays og indsæt flere rækker i mysql

  4. Hentning af returværdien fra JDBC MSSQL