MySQL-Remplace chaine dans toute la bdd

Résolu/Fermé
maxime_B Messages postés 788 Date d'inscription mardi 14 juin 2005 Statut Membre Dernière intervention 15 juin 2010 - Modifié par maxime_B le 16/04/2010 à 17:23
 ek0892 - 26 sept. 2013 à 17:12
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 1043 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
Modifié par dam75 le 16/04/2010 à 15:06
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 1043 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
19 avril 2010 à 18:54
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 mardi 14 juin 2005 Statut Membre Dernière intervention 15 juin 2010 55
Modifié par maxime_B le 19/04/2010 à 10:33
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 1043 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
19 avril 2010 à 10:56
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 mardi 14 juin 2005 Statut Membre Dernière intervention 15 juin 2010 55
19 avril 2010 à 17:08
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
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 mardi 14 juin 2005 Statut Membre Dernière intervention 15 juin 2010 55
20 avril 2010 à 15:32
Ok merci beaucoup pour ton aide.
0