2015-01-16 3 views
1

에 대한 재 코딩없이 MySQL은 행을 복제 :다음과 같은 테이블 구조를 감안할 때 데이터베이스 변경

ID 
Field1 
Field2 
Field3 

나는 테이블에 레코드를 복제하고 싶습니다. 의사 코드는 다음과 같을 것이다 :

  1. 내가 중복 ID를 싶지 않은 : 여기
    DUPLICATE * IN MyTable WHERE ID = 3 
    

    내 제약이다.
  2. 나는 테이블에 얼마나 많은 필드 또는 유형이 있는지 지금 알지 못합니다.

나는 이 아닙니다.이 작업을 PHP에서하고 싶습니다.

답변

2

select 문을 사용하여 행을 삽입 할 수 있습니다. 모든 값이 같은 새 행을 삽입하려면 select 문을 작성하여 원하는 값을 가져옵니다. 다음과 같이 시도하십시오.

INSERT INTO myTable (field1, field2, field3) 
    SELECT field1, field2, field3 FROM myTable WHERE id = 3; 

여기에 SQL Fiddle 예가 있습니다.

당신이 당신이 가진 옵션이 임시 테이블을 사용하는 것이 얼마나 많은 분야, 알 수없는 경우 편집 할 수 있습니다. 예를 들어 article을 참조하십시오. 임시 테이블이 필요한 이유는 중복 키 오류가 있으므로 행을 다시 삽입 할 수 없기 때문입니다. 따라서 논리는 다음과 같습니다. 새 테이블에 행을 추가하고 ID를 변경하고 새 ID로 중복 된 행을 이전 테이블에 삽입 한 다음 임시 테이블을 삭제하십시오.

id 열이 auto_increment라고 가정하면 새로운 ID를 현재 최대 ID + 1로 설정할 수 있습니다. ID를 업데이트 할 수있는 방법이 있다면 이미 존재하지 않습니다,이 작동합니다. 대신이 시도 :

여기
CREATE TEMPORARY TABLE temp SELECT * FROM myTable WHERE id = 3; 
UPDATE temp SET id = (SELECT MAX(id) FROM myTable) + 1; 
INSERT INTO myTable SELECT * FROM temp; 
DROP TABLE temp; 

다른 SQL Fiddle 예입니다.

+2

SQL 피들을 어떻게 빨리 만들 수 있습니까? 그것은 테이블을 만들고 임의의 값과 물건을 삽입 영원히 걸립니다 ... – Shahar

+0

@ Shahar 나는 MySQL의 질문에 많은 답변, 그래서 버릇이 된거야. Ctrl + C와 Ctrl + V는 친구입니다. – AdamMc331

+1

@Shahar 또한 _Text to DDL_ 창은 친숙합니다. – Barmar

관련 문제