[mysql] MySQL의 기존 행에 대한 Insert Statement 가져 오기

MySQL을 사용하여 쿼리를 실행할 수 있습니다.

SHOW CREATE TABLE MyTable;

그리고 특정 테이블에 대한 테이블 작성 명령문을 리턴합니다. 테이블이 이미 작성되어 있고 다른 데이터베이스에서 동일한 테이블을 작성하려는 경우 유용합니다.

이미 존재하는 행 또는 행 집합에 대해 insert 문을 가져올 수 있습니까? 일부 테이블에는 많은 열이 있으므로 insert 문을 쓰거나 데이터를 CSV로 내 보낸 다음 동일한 데이터를 가져 오지 않고 다른 데이터베이스로 행을 전송하기 위해 insert 문을 가져올 수 있으면 좋을 것입니다. 다른 데이터베이스로.

명확히하기 위해, 내가 원하는 것은 다음과 같이 작동하는 것입니다.

SHOW INSERT Select * FROM MyTable WHERE ID = 10;

그리고 나를 위해 다음을 반환하십시오.

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



답변

INSERTMySQL 콘솔에서 문장 을 얻는 방법은 없지만 Rob이 제안한 것처럼 mysqldump를 사용하여 문장 을 얻을 수 있습니다 . -t테이블 작성을 생략하도록 지정 하십시오.

mysqldump -t -u MyUserName -pMyPassword MyDatabase MyTable --where="ID = 10"


답변

MySQL Workbench에서는 단일 테이블 쿼리의 결과를 INSERT명령문 목록으로 내보낼 수 있습니다 . 쿼리를 실행 한 후 다음을 수행하십시오.

내보내기 버튼의 스냅 샷

  1. Export/Import결과 위 의 플로피 디스크를 클릭하십시오
  2. 대상 파일에 이름을 지정하십시오
  3. 창 하단에서 Format선택SQL INSERT statements
  4. 딸깍 하는 소리 Save
  5. 딸깍 하는 소리 Export

답변

SHOW CREATE TABLE MyTable 에서 생성 한 SQL로 테이블을 복사 했으므로 다음을 수행하여 데이터를 새 테이블에로드 할 수 있습니다.

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 을 사용하는 것 입니다. 특정 테이블의 데이터를 덤프하고 행을 제한하는 옵션을 제공 할 수 있습니다.


답변

나는 이것을 할 PHP 함수를 작성했다. 히스토리 테이블을 삭제 한 후 레코드를 교체해야 할 경우를 대비하여 insert 문을 작성해야했습니다.

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;
}


답변

Laptop Lift의 코드는 정상적으로 작동하지만 사람들이 좋아할만한 몇 가지 사항이 있습니다.

데이터베이스 핸들러는 하드 코딩되지 않은 인수입니다. 새로운 mysql API를 사용했습니다. 유연성을 위해 $ id를 선택적 $ where 인수로 대체했습니다. 누군가가 SQL 주입을 시도하고 따옴표와 관련된 간단한 파손을 피하려고 시도한 경우 real_escape_string을 사용했습니다. INSERT table (field...) VALUES (value...)...필드를 한 번만 정의한 다음 각 행의 값을 나열하기 위해 구문을 사용했습니다 (임플란트는 훌륭합니다). Nigel Johnson이 지적 했으므로 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).";";
}
?>


답변

선택 쿼리를 만들고 결과를 가리키고 sql로 내보내기를 선택할 수있는 SQLYOG 프로그램을 사용합니다 스크린 샷. 이것은 삽입 문을 제공합니다.


답변

MySQL 작업대 내에서 다음을 수행하십시오.

  1. 서버> 데이터 내보내기를 클릭하십시오.

  2. 오브젝트 선택 탭에서 원하는 스키마를 선택하십시오.

  3. 그런 다음 스키마 오른쪽의 목록 상자를 사용하여 원하는 테이블을 선택하십시오.

  4. 스크립트를 내보낼 파일 위치를 선택하십시오.

  5. Finish를 클릭하십시오.

  6. 새로 작성된 파일로 이동하여 삽입 문을 복사하십시오.