2008-10-23 4 views
13

행의 모든 ​​열을 복사하려고하지만 모든 열을 지정할 필요는 없습니다. http://dev.mysql.com/doc/refman/5.1/en/insert-select.html에서 구문을 알고 있지만 열을 무시할 수있는 방법이 없습니다.MySQL의 행 복사

예를 들어, 기본 키를 제외하고 행의 모든 ​​열을 새 행에 복사하려고합니다.

모든 필드가 포함 된 쿼리를 작성하지 않고도이를 수행 할 수 있습니까?

답변

3

모두 선택하지 않을 경우 선택하려는 열을 나열해야합니다. 복사/붙여 넣기는 친구입니다.

1

열을 지정하지 않으면 항목을 순서대로 유지해야합니다. 예를 들어 :

INSERT INTO `users` (`ID`, `Email`, `UserName`) VALUES 
(1, '[email protected]', 'StackOverflow') 

작동겠습니까하지만 안 좋네요 있도록

INSERT INTO `users` VALUES 
('[email protected]', 'StackOverflow') 

은 ID 열에서 이메일을 배치한다. 난 당신이 생각하는 방식으로 삽입 할 수있는 행 수에 한계가 있다고 생각

INSERT INTO `users` (`Email`, `UserName`) VALUES 
('[email protected]', 'StackOverflow'), 
('[email protected]', 'StackOverflow2'), 
('[email protected]', 'StackOverflow3'), 
etc... 

:

처럼 한 번에 열을 작성하십시오.

+0

필자가 알고있는 한, 그 방법으로 삽입 할 수있는 행의 수는 MySQL 패킷 크기입니다. –

+0

알아 둘만한; 덕분에 Dominic –

1

아니요, 불가능합니다.

하지만 열 목록을 얻을 당신이이 과정도 등 코드

0

내가 겠지 통해 수행 할 수 있습니다 복사 된 원하지 않는 한 쉽게 삭제할 당신은 기본 키를 생략 할부터 auto_increment 컬럼이며, MySQL이 시퀀스의 다음 값을 자동 생성하도록합니다. '널 (MYTABLE에

삽입 :

는 다음 싱글/멀티 레코드 삽입에 대한 작동에 ... 방법에서 선택 삽입을 통해 대량 삽입 작업을 수행 할 필요가 없습니다 가정, 점을 감안 a ','b ','c ');

여기서 첫 번째 열은 auto_incremented 기본 키이고 다른 열은 테이블의 다른 열입니다. MySQL이 auto_incremented 컬럼에 대해 null (또는 0)을 발견하면 null을 자동으로 다음 유효한 값으로 바꿉니다 (자세한 내용은 this link 참조). 이 링크는 설명 된 NO_AUTO_VALUE_ON_ZERO SQL 모드를 비활성화하여이 기능을 비활성화 할 수 있습니다.

궁금한 점이 있으면 알려주세요.

-Dipin

+0

"행의 모든 ​​열을 복사하고 싶지만 모든 열을 지정할 필요는 없습니다"? – haknick

+0

SQL에 명령문을 삽입 할 때 열 이름 목록은 VALUES 키워드 앞에 오는 부분입니다. 내가 SQL로 작업한다는 것을 감안할 때, OP는 열 이름을 나열하지 않아도되고 각 열의 * value *를 지정하지 않으려는 것이 아니라 할당 문을 실제로 작성하지 않고 다른 언어로 변수에 값을 저장하려고하는 누군가와 비슷하기 때문에 다른 언어에서는 가능하지 않습니다. – Dipin

15

당신의 id 또는 기본 키 열이 auto_increment 경우는 임시 테이블을 사용할 수 있습니다

CREATE TEMPORARY TABLE temp_table 
AS 
SELECT * FROM source_table WHERE id='7'; 
UPDATE temp_table SET id='100' WHERE id='7'; 
INSERT INTO source_table SELECT * FROM temp_table; 
DROP TEMPORARY TABLE temp_table; 

그래서 이런 식으로 당신이 행 ID = 모든 데이터를 복사 할 수 있습니다 '7' 새 값 '100'(또는 source_table의 현재 auto_increment 값 범위를 초과하는 값)을 할당하십시오.

편집 : Mind the; 문장 다음에 :)

+1

감사합니다, 매력처럼 작동합니다. PHP로이 작업을 시도하는 다른 사람은 각각의 SQL 문이 단일 mysql_query()로 이동해야한다는 것을 기억하십시오. – kontur

+7

'id'를 0으로 설정하면 작동합니다. 'INSERT'에서 값이 'auto_increment' 인 컬럼은 다음 값이 무엇이든간에 삽입됩니다. – TRiG

+0

저장된 루틴으로 가장 잘 작동합니다. –

2

이것은 내가 작성한 PHP 스크립트로, 첫 번째 열이 자동 증가라고 가정합니다.

$sql = "SELECT * FROM table_name LIMIT 1"; 
$res = mysql_query($sql) or die(mysql_error()); 
for ($i = 1; $i < mysql_num_fields($res); $i++) { 
    $col_names .= mysql_field_name($res, $i).", "; 
} 
$col_names = substr($col_names, 0, -2); 

$sql = "INSERT INTO table_name (".$col_names.") SELECT ".$col_names." FROM table_name WHERE condition "; 
$res = mysql_query($sql) or die(mysql_error()); 
1

테이블을 새로운 것으로 복사 한 다음 원하지 않는 컬럼을 삭제하십시오. 단순한.

관련 문제