sql >> Databáze >  >> RDS >> Mysql

Zálohování databáze SQL Query

Získání dat celé databáze - SqlFiddle Demo

Získání dat pouze z jedné tabulky - - SqlFiddle Demo

Udělal jsem složité, ale přijatelné řešení. Potřebuje však zlepšení .

Toto je složitá procedura se složitým kódováním, zejména dotaz, který načte všechny řádky všech sloupců do jednoho výsledku pomocí group_concat a formáty se složitým zřetězením.

Potřebujete to zjednodušené, efektivní a fungující ve všech scénářích.

Některé podrobnosti o mém řešení :Následuje důležitá část, další jsou jen podmínky/smyčkování (nejsem zručný s dokumentací, také to chce čas a návrhy, někdo by mi mohl pomoci s formátováním a vylepšením, omlouvám se za případné nepříjemnosti, nicméně budu rád za každou pomoc od tebe a mě)

Poznámka:group_concat(yourColumn separator ' --anySeparator-- ') slučuje všechny řádky vašeho sloupce do jednoho tak, že řádky jsou odděleny --anySeparator--

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

1 :názvy sloupců jsou získány jako jedna hodnota oddělená

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

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

2:názvy sloupců jsou získány jako jedna hodnota oddělená znakem

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

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

3:Chybějící písmeno (`) je umístěno na začátek a konec názvů sloupců

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

4:Jednoduše provede vložení res= " insert into emp( `id` , `ename` , `did` ) values(" Zde můžete vidět, proč jsem vložil oddělovače (je dosaženo formátování MySql)

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

Výše uvedené je nejdůležitější prohlášení Získá všechny datové řádky z tabulky jako řádky jednoho sloupce a dále jsou tyto řádky sloučeny tak, že jsou odděleny '),('

5.1 concat(",@cns2,") získá hodnoty všech sloupců v jednom.

5.2 Po vnějším nejvíce concat nyní @q je

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

5.3:group_concat sloučí všechny řádky tohoto kombinovaného sloupce do jedné hodnoty. Hodnoty sloupců budou spojeny pomocí oddělovačů existujících v @cns2 a spojení na úrovni řádků bude s '),('

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

@q se provede

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

6:A dostaneme výsledek jako

 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

A za @res = concat(@res,@temp,");"); dostáváme

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


  1. Co jsou výpisy připravené na straně klienta?

  2. Proč iterace přes velký Django QuerySet spotřebovává obrovské množství paměti?

  3. Jak získat aktuální datum v PL/SQL?

  4. PHP říká, že není vybrána žádná databáze ani po použití mysqli_select_db()