197 votes

Obtenir une instruction d'insertion pour une ligne existante dans MySQL

En utilisant MySQL, je peux exécuter la requête :

SHOW CREATE TABLE MyTable;

Il renverra l'instruction de création de table pour la table spécifiée. Cette fonction est utile si vous avez déjà créé une table et que vous souhaitez créer la même table dans une autre base de données.

Est-il possible d'obtenir la déclaration d'insertion pour une ligne ou un ensemble de lignes déjà existantes ? Certaines tables ont de nombreuses colonnes, et il serait bon que je puisse obtenir une instruction d'insertion pour transférer des lignes dans une autre base de données sans avoir à écrire l'instruction d'insertion, ou sans exporter les données au format CSV et importer ensuite les mêmes données dans l'autre base de données.

Pour clarifier, ce que je veux, c'est quelque chose qui fonctionnerait comme suit :

SHOW INSERT Select * FROM MyTable WHERE ID = 10;

Et que l'on me renvoie ce qui suit :

INSERT INTO MyTable(ID,Col1,Col2,Col3) VALUES (10,'hello world','some value','2010-10-20');

0voto

shawn Points 111

Dans MySQL Workbench, cliquez avec le bouton droit de la souris sur la table et sélectionnez "Send to SQL Editor"/"Insert Statement". Nettoyez-la un peu et vous serez prêt à partir.

-1voto

Ali Gangji Points 802

D'après vos commentaires, votre objectif est de migrer les modifications apportées à la base de données d'un environnement de développement vers un environnement de production.

La meilleure façon de procéder est de conserver les modifications apportées à la base de données dans le code source et, par conséquent, de les suivre dans votre système de contrôle du code source, tel que git ou svn.

il est possible d'être rapidement opérationnel avec ce type d'outil : https://github.com/davejkiger/mysql-php-migrations

comme solution personnalisée très basique en PHP, vous pouvez utiliser une fonction comme celle-ci :

function store_once($table, $unique_fields, $other_fields=array()) {
    $where = "";
    $values = array();
    foreach ($unique_fields as $k => $v) {
        if (!empty($where)) $where .= " && ";
        $where .= "$k=?";
        $values[] = $v;
    }
    $records = query("SELECT * FROM $table WHERE $where", $values);
    if (false == $records) {
        store($table, array_merge($unique_fields, $other_fields));
    }
}

vous pouvez alors créer un script de migration qui mettra à jour n'importe quel environnement selon vos spécifications.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X