info:mysql:concatenation_plusieurs_bases_mysql

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
info:mysql:concatenation_plusieurs_bases_mysql [2023/03/20 14:21] – supprimée - modification externe (Unknown date) 127.0.0.1info:mysql:concatenation_plusieurs_bases_mysql [2023/03/20 14:21] (Version actuelle) – ↷ Page déplacée de info:concatenation_plusieurs_bases_mysql à info:mysql:concatenation_plusieurs_bases_mysql radeff
Ligne 1: Ligne 1:
 +
 +====== concaténation plusieurs bases MySQL ======
 +
 +===== précautions à prendre et solutions, ou pourquoi mysql est parfois benêt! =====
 +
 +lorsqu'on concatène plusieurs bases MySQL ayant une structure similaire mais dans un ordre différent, ne surtout pas croire que la concaténation est correcte! elle ne fonctionne que si la structure ET l'ordre sont identiques, sinon il prend dans l'ordre seulement
 +
 +exemple
 +<code mysql>
 +-- lancer mysql
 +mysql
 +-- creer base testA
 +create database testA;
 +use testA;
 +-- creer table A.a
 +CREATE TABLE `a` (
 +  `a` text NOT NULL,
 +  `b` text NOT NULL,
 +  `c` text NOT NULL
 +) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 +
 +-- 
 +-- Contenu de la table `a`
 +-- 
 +
 +INSERT INTO `a` (`a`, `b`, `c`) VALUES 
 +('Aa', 'Bb', 'Cc'),
 +('Cc', 'Cb', 'Ca'),
 +('Bb', 'Bc', 'Ba');
 +
 +
 +-- creer base testB
 +create database testB;
 +use testB;
 +-- creer table B.a
 +-- noter structure identique mais ordre different
 +-- 
 +-- Structure de la table `a`
 +-- 
 +
 +CREATE TABLE `a` (
 +  `b` text NOT NULL,
 +  `c` text NOT NULL,
 +  `a` text NOT NULL
 +) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 +
 +-- 
 +-- Contenu de la table `a`
 +-- 
 +
 +INSERT INTO `a` (`b`, `c`, `a`) VALUES 
 +('Bb', 'Bc', 'Ba');
 +
 +
 +-- Base de données: `testC`
 +-- creer base testC
 +create database testC;
 +use testC;
 +-- creer table C.a
 +-- noter structure identique mais ordre different
 +-- 
 +-- Structure de la table `a`
 +-- 
 +
 +CREATE TABLE `a` (
 +  `c` text NOT NULL,
 +  `b` text NOT NULL,
 +  `a` text NOT NULL
 +) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 +
 +-- 
 +-- Contenu de la table `a`
 +-- 
 +
 +INSERT INTO `a` (`c`, `b`, `a`) VALUES 
 +('Cc', 'Cb', 'Ca');
 +
 +-------------------------
 +</code>
 +
 +==== et maintenant le test ====
 +
 +
 +<code>
 +INSERT INTO `testA`.`a`
 +SELECT *
 +FROM `testB`.`a` ;
 +
 +INSERT INTO `testA`.`a`
 +SELECT *
 +FROM `testC`.`a` ;
 +</code>
 +
 +- Resultat de  SELECT * FROM `testA`.`a`; :-(
 +
 +^a ^b ^c  ^
 +|Aa |Bb |Cc |
 +|Cc |Cb |Ca |
 +|Bb |Bc |Ba |
 +
 +
 +
 +On voit (notamment) que le champs c de TestC est devenu le champs a de TestA, et que le champs b de TestB est devenue le champs a de TestA
 +
 +====== avec le critère "SELECT *" MySQL ne prend compte que de l'ORDRE des noms des champs, pas de leur NOMS ======
 +
 + :!: --> prudence, écrire tous les noms des champs
 +
 +le plus simple pour les récupérer, s'il y en a beaucoup: utiliser phpMyAdmin ou mysql-query-browser et faire un SELECT en choississant tous les champs, puis corriger le script du dessus comme suit
 +
 +====== Script propre  ======
 +
 +
 +
 +
 +<code>
 +INSERT INTO `testA`.`a`
 +SELECT `a`, `b`, `c` 
 +FROM `testB`.`a` ;
 +
 +INSERT INTO `testA`.`a`
 +SELECT `a`, `b`, `c` 
 +FROM `testC`.`a`
 +</code>
 +
 +==== et maintenant le test ====
 +- Resultat de  SELECT * FROM `testA`.`a`; 
 +
 +^a ^b ^c  ^
 +|Aa |Bb |Cc |
 +|Ca |Cb |Cc |
 +|Ba |Bc |Bc |
 +
 +:-D korrekt!