Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête SQL de sauvegarde de la base de données

Pour obtenir les données de toute la base de données - Démo SqlFiddle

Pour obtenir les données d'une seule table - - Démo SqlFiddle

J'ai fait une solution complexe mais acceptable. Mais doit être amélioré .

Il s'agit d'une procédure complexe avec un codage complexe, en particulier la requête qui récupère toutes les lignes de toutes les colonnes en un seul résultat par group_concat et des formats avec une concaténation complexe.

J'en ai besoin simplifié, efficace et fonctionnant dans tous les scénarios.

Quelques détails de ma solution :Ce qui suit est la partie importante, l'autre n'est que des conditions/boucles (je ne suis pas à l'aise avec la documentation aussi cela a besoin de temps et de suggestions, quelqu'un pourrait m'aider dans sa mise en forme et son amélioration, désolé pour tout inconvénient, mais je serai heureux de toute aide de toi et moi)

Remarque :group_concat(yourColumn separator ' --anySeparator-- ') fusionne toutes les lignes de votre colonne en une seule de sorte que les lignes soient séparées par --anySeparator--

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

1 :les noms_colonnes sont obtenus sous la forme d'une seule valeur séparée par

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

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

2 :les noms_colonnes sont obtenus sous la forme d'une seule valeur séparée par

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

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

3 :La lettre manquante (`) est placée au début et à la fin des noms de colonne

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

4 :Fait simplement res= " insert into emp( `id` , `ename` , `did` ) values(" Ici vous pouvez voir pourquoi j'ai mis des séparateurs (le formatage MySql est réalisé)

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

Ci-dessus se trouve la déclaration la plus cruciale Il obtient toutes les lignes de données de la table en tant que lignes d'une seule colonne et ces lignes sont ensuite fusionnées en étant séparées par '),('

5.1 concat(",@cns2,") obtient les valeurs de toutes les colonnes en une seule.

5.2 Après la concatisation la plus externe, @q est maintenant

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

5.3 :group_concat fusionnera toutes les lignes de cette colonne combinée en une seule valeur. Les valeurs des colonnes seront jointes via des séparateurs existant dans @cns2 et la jointure au niveau des lignes se fera avec '),('

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

@q est exécuté

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

6 :Et nous obtiendrons le résultat comme

 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

Et après @res = concat(@res,@temp,");"); nous obtenons

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