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');

5voto

FINARX Points 71

Il existe une solution simple et utile pour créer une déclaration INSERT à éditer sans avoir besoin d'exporter le code SQL avec un simple copier-coller (presse-papiers) :

  • Sélectionnez la ligne dans la fenêtre de résultat d'une requête de MySQL Workbench, probablement même plusieurs lignes. J'utilise cette méthode même si la ligne contient des données différentes de celles que je veux insérer dans mon script ou lorsque l'objectif est de créer une instruction préparée avec des espaces réservés.
  • Collez la ligne copiée qui se trouve maintenant dans votre presse-papiers dans le même tableau (la liste des résultats de la requête est un éditeur dans workbench) dans la dernière ligne libre.
  • Appuyez sur "Appliquer" et une fenêtre s'ouvre pour vous montrer l'instruction INSERT - NE PAS EXECUTER
  • Copier le SQL de la fenêtre dans le presse-papiers
  • ANNULE l'exécution, ce qui ne modifie pas la base de données mais conserve le code SQL dans le presse-papiers.
  • Collez le code SQL où vous voulez et modifiez-le comme vous le souhaitez, par exemple en insérant des espaces réservés ?

4voto

flash Points 487

Vous pouvez utiliser Sequel pro pour faire cela, il y a une option pour "obtenir comme déclaration d'insertion" pour les résultats obtenus.

4voto

fall Points 373

Pour les utilisateurs de HeidiSQL :

Si vous utilisez HeidiSQL, vous pouvez sélectionner la (les) ligne(s) pour laquelle (lesquelles) vous souhaitez obtenir une instruction d'insertion. Cliquez ensuite avec le bouton droit de la souris > Exporter les lignes de la grille > sélectionnez "Copier dans le presse-papiers" pour "Cible de sortie", "Sélection" pour "Sélection de ligne" afin de ne pas exporter d'autres lignes, "INSERTS SQL" pour "Format de sortie" > Cliquez sur OK.

enter image description here

L'instruction d'insertion se trouve dans le presse-papiers.

3voto

snyman Points 11

Vous pouvez créer un SP avec le code ci-dessous - il prend également en charge les NULLS.

select 'my_table_name' into @tableName;

/*find column names*/
select GROUP_CONCAT(column_name SEPARATOR ', ') from information_schema.COLUMNS
where table_schema =DATABASE()
and table_name = @tableName
group by table_name
into @columns
;

/*wrap with IFNULL*/
select replace(@columns,',',',IFNULL(') into @selectColumns;
select replace(@selectColumns,',IFNULL(',',\'~NULL~\'),IFNULL(') into @selectColumns;

select concat('IFNULL(',@selectColumns,',\'~NULL~\')') into @selectColumns;

/*RETRIEVE COLUMN DATA FIELDS BY PK*/
SELECT
  CONCAT(
    'SELECT CONCAT_WS(','''\'\',\'\''',' ,
    @selectColumns,
    ') AS all_columns FROM ',@tableName, ' where id = 5 into @values;'
    )
INTO @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;

/*Create Insert Statement*/
select CONCAT('insert into ',@tableName,' (' , @columns ,') values (\'',@values,'\')') into @prepared;

/*UNWRAP NULLS*/
select replace(@prepared,'\'~NULL~\'','NULL') as statement;

2voto

Teodor Hirs Points 17

Si vous utilisez phpMyAdmin (Testé sur la version 5.x) :

Cliquez sur le bouton "Modifier" à côté de la ligne pour laquelle vous souhaitez avoir une instruction d'insertion, puis en bas à côté des boutons d'action, sélectionnez "Afficher la requête d'insertion" et appuyez sur "Go".

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