Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kopia zapasowa bazy danych SQL Query

Aby uzyskać dane całej bazy danych - SqlFiddle Demo

Aby uzyskać dane tylko z jednej tabeli — — Demo SqlFiddle

Zrobiłem złożone, ale akceptowalne rozwiązanie. Ale wymaga poprawy .

Jest to złożona procedura ze złożonym kodowaniem, zwłaszcza zapytanie, które pobiera wszystkie wiersze wszystkich kolumn w jeden wynik przez group_concat i formaty ze złożoną konkatenacją.

Potrzebujesz uproszczonego, wydajnego i działającego we wszystkich scenariuszach.

Niektóre szczegóły mojego rozwiązania :Ważna jest następująca część, inne to tylko warunki / Zapętlanie (nie jestem pod ręką z dokumentacją również potrzebuje czasu i sugestii, ktoś może mi pomóc w jej formatowaniu i ulepszeniu, przepraszam za wszelkie niedogodności, jednak chętnie za wszelką pomoc od ciebie i ode mnie)

Uwaga:group_concat(yourColumn separator ' --anySeparator-- ') łączy wszystkie wiersze kolumny w taki sposób, że wiersze są oddzielone --anySeparator--

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

1 :nazwy kolumn są pobierane jako pojedyncza wartość oddzielona

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

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

2 :nazwy kolumn są pobierane jako pojedyncza wartość oddzielona

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

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

3:Brakująca litera (`) jest umieszczana na początku i na końcu nazw kolumn

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

4:Po prostu wstawiasz res= " insert into emp( `id` , `ename` , `did` ) values(" Tutaj możesz zobaczyć, dlaczego umieściłem separatory (osiągnięto formatowanie MySql)

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

Powyżej jest najważniejszym stwierdzeniem Pobiera wszystkie wiersze danych z tabeli jako wiersze pojedynczej kolumny, a następnie te wiersze są scalane i oddzielane przez '),('

5.1 concat(",@cns2,") pobiera wartości wszystkich kolumn w jednej.

5.2 Po zewnętrznym konkacie teraz @q to

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

5.3 :group_concat połączy wszystkie wiersze tej połączonej kolumny w jedną wartość. Wartości kolumn zostaną połączone za pomocą separatorów istniejących w @cns2, a łączenie na poziomie wierszy nastąpi za pomocą '),('

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

@q jest wykonywane

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

6 :I otrzymamy wynik 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 po @res = concat(@res,@temp,");"); otrzymujemy

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zmień int na float (mysql)

  2. MYSQL LEWY JOIN z GROUP BY

  3. Wiele kontenerów dockera dla mysql lub jedna instancja z wieloma bazami danych

  4. Nielegalna mieszanka błędów sortowania z MySql podczas uruchamiania zestawu testowego rails

  5. dodaj tymczasową kolumnę z wartością