Получить инструкцию вставки для существующей строки в MySQL - PullRequest
111 голосов
/ 20 октября 2010

Используя MySQL, я могу выполнить запрос:

SHOW CREATE TABLE MyTable;

И он вернет оператор создания таблицы для указанной таблицы. Это полезно, если у вас уже есть созданная таблица, и вы хотите создать такую ​​же таблицу в другой базе данных.

Можно ли получить оператор вставки для уже существующей строки или набора строк? В некоторых таблицах есть много столбцов, и было бы хорошо, если бы я мог получить оператор вставки для переноса строк в другую базу данных без необходимости записывать оператор вставки или без экспорта данных в CSV, а затем импортировать те же данные в другую базу данных.

Просто чтобы уточнить, что я хочу, это то, что будет работать следующим образом:

SHOW INSERT Select * FROM MyTable WHERE ID = 10;

И верните мне следующее:

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

Ответы [ 14 ]

135 голосов
/ 07 декабря 2012

Кажется, нет способа получить операторы INSERT из консоли MySQL, но вы можете получить их, используя mysqldump , как предложил Роб. Укажите -t, чтобы исключить создание таблицы.

mysqldump -t -u MyUserName -pMyPassword MyDatabase MyTable --where="ID = 10"
50 голосов
/ 20 мая 2016

В MySQL Workbench вы можете экспортировать результаты любого запроса в одну таблицу в виде списка INSERT операторов.Просто запустите запрос, а затем:

Snapshot of export button

  1. нажмите на дискету рядом с Export/Import над результатами
  2. дайте целевому файлу имя
  3. внизу окна, для Format выберите SQL INSERT statements
  4. щелкните Save
  5. щелкните Export
10 голосов
/ 11 июля 2012

Я написал функцию php, которая сделает это.Мне нужно было сделать оператор вставки на случай, если после удаления таблицы истории необходимо заменить запись:

function makeRecoverySQL($table, $id)
{
    // get the record          
    $selectSQL = "SELECT * FROM `" . $table . "` WHERE `id` = " . $id . ';';

    $result = mysql_query($selectSQL, $YourDbHandle);
    $row = mysql_fetch_assoc($result); 

    $insertSQL = "INSERT INTO `" . $table . "` SET ";
    foreach ($row as $field => $value) {
        $insertSQL .= " `" . $field . "` = '" . $value . "', ";
    }
    $insertSQL = trim($insertSQL, ", ");

    return $insertSQL;
}
10 голосов
/ 20 октября 2010

Поскольку вы скопировали таблицу с помощью SQL, созданного SHOW CREATE TABLE MyTable , вы можете просто сделать следующее, чтобы загрузить данные в новую таблицу.

INSERT INTO dest_db.dest_table SELECT * FROM source_db.source_table;

Если вы действительно хотите использовать операторы INSERT, то единственный известный мне способ - это использовать mysqldump http://dev.mysql.com/doc/refman/5.1/en/mysqldump.htm. Вы можете дать ему возможность просто сохранять данные для конкретной таблицы и даже ограничить строки.

9 голосов
/ 09 ноября 2012

Код ноутбука Lift работает нормально, но я подумал, что людям может понравиться несколько вещей.

Обработчик базы данных - аргумент, а не жестко закодированный.Использовал новый MySQL API.Заменил $ id на необязательный аргумент $ where для большей гибкости.Использовал real_escape_string на тот случай, если кто-либо когда-либо пытался сделать инъекцию sql и избежать простых поломок с кавычками.Использовал синтаксис INSERT table (field...) VALUES (value...)..., чтобы поля определялись только один раз, а затем просто перечисляли значения каждой строки (implode - это круто).Поскольку Найджел Джонсон указал на это, я добавил NULL обработку.

Я использовал $array[$key], потому что я боялся, что это может как-то измениться, но если что-то не так ужасно, это не должно так или иначе.

<?php
function show_inserts($mysqli,$table, $where=null) {
    $sql="SELECT * FROM `{$table}`".(is_null($where) ? "" : " WHERE ".$where).";";
    $result=$mysqli->query($sql);

    $fields=array();
    foreach ($result->fetch_fields() as $key=>$value) {
        $fields[$key]="`{$value->name}`";
    }

    $values=array();
    while ($row=$result->fetch_row()) {
        $temp=array();
        foreach ($row as $key=>$value) {
            $temp[$key]=($value===null ? 'NULL' : "'".$mysqli->real_escape_string($value)."'");
        }
        $values[]="(".implode(",",$temp).")";
    }
    $num=$result->num_rows;
    return "INSERT `{$table}` (".implode(",",$fields).") VALUES \n".implode(",\n",$values).";";
}
?>
6 голосов
/ 22 октября 2010

Я использую программу SQLYOG , где я могу сделать запрос на выборку, указать screenshot результаты и выбрать экспорт как sql.Это дает мне операторы вставки.

5 голосов
/ 06 декабря 2014

В рабочей среде MySQL выполните следующие действия:

  1. Нажмите Сервер> Экспорт данных

  2. На вкладке «Выбор объекта» выберите нужную схему.

  3. Далее выберите нужные таблицы с помощью списка справа от схемы.

  4. Выберите расположение файла для экспорта сценария.

  5. Нажмите Готово.

  6. Перейдите во вновь созданный файл и скопируйте операторы вставки.

4 голосов
/ 23 ноября 2017

Если вы хотите получить «вставку оператора» для своей таблицы, вы можете попробовать следующий код.

SELECT 
    CONCAT(
        GROUP_CONCAT(
            CONCAT(
                'INSERT INTO `your_table` (`field_1`, `field_2`, `...`, `field_n`) VALUES ("',
                `field_1`,
                '", "',
                `field_2`,
                '", "',
                `...`,
                '", "',
                `field_n`,
                '")'
            ) SEPARATOR ';\n'
        ), ';'
    ) as `QUERY`
FROM `your_table`;

В результате вы получите оператор вставки:

INSERT INTO your_table (field_1, field_2, ..., field_n) ЗНАЧЕНИЯ (value_11, value_12, ..., value_1n);

INSERT INTO your_table (field_1, field_2, ..., field_n) ЗНАЧЕНИЯ (value_21, value_22, ..., value_2n);

/ .............................................. ....... /

INSERT INTO your_table (field_1, field_2, ..., field_n) ЗНАЧЕНИЯ (value_m1, value_m2, ..., value_mn);

, где m - количество записей в вашей таблице

3 голосов
/ 09 января 2014

вы можете использовать Sequel pro, чтобы сделать это, есть опция «получить как оператор вставки» для полученных результатов

1 голос
/ 09 мая 2019

Для пользователей HeidiSQL :

Если вы используете HeidiSQL, вы можете выбрать строки, которые вы хотите получить оператором вставки.Затем щелкните правой кнопкой мыши> Экспортировать строки сетки> выберите «Копировать в буфер» для «Выходной объект», «Выбор» для «Выбор строки», чтобы не экспортировать другие строки, «SQL INSERT» для «Формат вывода»> Нажмите «ОК».

enter image description here

Оператор вставки будет внутри вашего буфера обмена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...