sql >> Database >  >> RDS >> Mysql

Database back-up SQL-query

Om gegevens van de hele database te krijgen - SqlFiddle-demo

Om gegevens van slechts één tabel te krijgen - - SqlFiddle Demo

Ik heb een complexe maar acceptabele oplossing gemaakt. Maar moet worden verbeterd .

Dit is een complexe procedure met complexe codering, vooral de query die alle rijen van alle kolommen ophaalt in een enkel resultaat door group_concat en formaten met een complexe aaneenschakeling.

Moet het vereenvoudigd, efficiënt en in alle scenario's werken.

Enkele details van mijn oplossing :Het volgende is het belangrijkste deel, andere zijn gewoon voorwaarden / lus (ik ben niet handig met documentatie, het heeft ook tijd en suggesties nodig, iemand kan me helpen bij het formatteren en verbeteren, sorry voor het ongemak, maar ik zal blij zijn voor alle hulp van jou en mij)

Opmerking:group_concat(yourColumn separator ' --anySeparator-- ') voegt alle rijen van uw kolom samen tot één zodanig dat rijen worden gescheiden door --anySeparator--

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

1 :column_names worden als een enkele waarde weergegeven, gescheiden door

`,` => @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 worden als een enkele waarde weergegeven, gescheiden door

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

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

3:Ontbrekende letter (`) wordt aan het begin en einde van kolomnamen geplaatst

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

4:laat eenvoudig res= " insert into emp( `id` , `ename` , `deed` ) values(" Hier kun je zien waarom ik scheidingstekens heb geplaatst (MySql-opmaak is bereikt)

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

Hierboven staat de meest cruciale uitspraak Het haalt alle gegevensrijen uit de tabel als rijen van een enkele kolom en verder worden deze rijen samengevoegd, gescheiden door '),('

5.1 concat(",@cns2,") krijgt waarden van alle kolommen in één.

5.2 Na de buitenste concat is nu @q

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

5.3 :group_concat voegt alle rijen van die gecombineerde kolom samen tot één waarde. Kolomwaarden worden samengevoegd door scheidingstekens die bestaan ​​in @cns2 en samenvoeging op rijniveau gebeurt met '),('

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

@q wordt uitgevoerd

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

6:En we zullen resultaat krijgen als

 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

En na @res = concat(@res,@temp,");"); we krijgen

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


  1. Hoe toon ik mysql-tabelrij als kolom?

  2. Een percentage opslaan in Rails + MySQL

  3. Nieuwe kolommen toevoegen aan bestaande tabel in een migratie in Laravel

  4. iets over ansi_nulls