sql >> Databasteknik >  >> RDS >> Mysql

Databas backup SQL Query

För att få data från hela databasen - SqlFiddle Demo

För att få data för endast en tabell - - SqlFiddle Demo

Jag har gjort en komplex men acceptabel lösning. Men behöver förbättras .

Detta är en komplex procedur med komplex kodning, särskilt frågan som hämtar alla rader i alla kolumner till ett enda resultat av group_concat och format med en komplex sammanlänkning.

Behöver det förenklat, effektivt och fungerande i alla scenarier.

Några detaljer om min lösning :Följande är den viktiga delen, annat är bara villkor/slingor (jag är inte händig med dokumentation, det behöver tid och förslag, någon kanske kan hjälpa mig med formateringen och förbättringen, ursäkta för eventuella besvär, men jag är glad för all hjälp från dig och mig)

Notera:group_concat(din kolumnavgränsare ' --anySeparator-- ') slår samman alla rader i din kolumn som en sådan att rader separeras med --anySeparator--

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

1 :kolumnnamn ges som ett enda värde avgränsat med

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

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

2 :kolumnnamn ges som ett enda värde separerat av

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

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

3:Saknade bokstav (`) sätts i början och slutet av kolumnnamn

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

4:Får helt enkelt res= " insert into emp( `id` , `ename` , `did` ) values(" Här kan du se varför jag har satt separatorer (MySql-formatering uppnås)

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

Ovan är det mest avgörande uttalandet Den hämtar alla datarader från tabellen som rader i en enda kolumn och vidare slås dessa rader samman och separeras med '),('

5.1 concat(",@cns2,") hämtar värden för alla kolumner i en enda.

5.2 Efter det yttre mest konkat är nu @q

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

5.3 :group_concat kommer att slå samman alla rader i den kombinerade kolumnen till ett värde. Kolumnvärden kommer att sammanfogas genom separatorer som finns i @cns2 och sammanfogning på radnivå kommer att ske med '),('

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

@q körs

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

6:Och vi kommer att få resultat 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

Och 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. Säkerhetskopiera/återställ SQLlite-databas till Google Drive-appmappen

  2. Python Pandas - Använda to_sql för att skriva stora dataramar i bitar

  3. org.hibernate.HibernateException:Databasen returnerade inget naturligt genererat identitetsvärde

  4. Simulera group_concat MySQL-funktion i Microsoft SQL Server 2005?