MySQL-Remplace chaine dans toute la bdd

Résolu
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   -  
 ek0892 -
Bonjour,
Comment remplacer une chaine par une autre dans toutes les tables d'une base de données?
Replace exige qu'on lui donne le nom d'une table et d'une colonne, donc ce n'est pas utilisable comme ça.

Exemple :
Remplacer 'chaine1' par 'mot1' dans la base de données 'test' sur les 50 tables qui la composent en une seule ligne.

Merci d'avance

5 réponses

dam75 Messages postés 1063 Date d'inscription   Statut Webmaster Dernière intervention   67
 
Bonjour,

Si tu utilises MySQL 5.1, tu peux te servir de la base information_schema, qui contient entre autres la liste de toutes les tables de ta base ...
Ensuite, tu peux par exemple l'utiliser pour générer ta requête.

Ex :
SELECT CONCAT('UPDATE test.', TABLE_NAME, ' SET champ1=REPLACE(champ1, "chaine1", "mot1");') FROM information_schema.TABLES WHERE TABLE_SCHEMA="test";  

-> cette requête te donnera un résultat qu'il te suffira de coller dans le client :
UPDATE test.table1 SET champ1=REPLACE(champ1, "chaine1", "mot1");
UPDATE test.table2 SET champ1=REPLACE(champ1, "chaine1", "mot1");
...
Bon courage
A+++
1
dam75 Messages postés 1063 Date d'inscription   Statut Webmaster Dernière intervention   67
 
non, ce que tu as écrit ne marchera pas ...

Ce serait plutôt :
SELECT CONCAT('UPDATE test.', TABLE_NAME, ' SET ',COLUMN_NAME,'=REPLACE(',COLUMN_NAME,', "chaine1", "mot1");') FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="test";
1
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
Ok merci, ça fonctionne bien malgré que je possède la version 5.0.51.
Est-ce que c'est possible de faire la même chose avec toutes les colonnes de toutes les tables en même temps?
0
dam75 Messages postés 1063 Date d'inscription   Statut Webmaster Dernière intervention   67
 
Oui, tu peux récupérer par ce biais toutes les tables si tu veux ... par contre, c'est à toi de mettre dans la requête les colonnes de ton choix.

Si tu as besoin de la liste des colonnes, tu as aussi la table COLUMNS :
SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="test";
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
Ok merci à toi.
Ce serais donc possible de faire une requête qui va modifier dans la base de données tout ce qui est "chaine1" par "mot1" de cette manière :

SELECT CONCAT('UPDATE test.', TABLE_NAME, ' SET (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="test")=REPLACE((SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA="test"), "chaine1", "mot1");') FROM information_schema.TABLES WHERE TABLE_SCHEMA="test"; 
0
ek0892
 
peux tu détailler la requete . car je n'arrive pas a l'utiliser
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
Ok merci beaucoup pour ton aide.
0