행의 모든 열을 복사하려고하지만 모든 열을 지정할 필요는 없습니다. http://dev.mysql.com/doc/refman/5.1/en/insert-select.html에서 구문을 알고 있지만 열을 무시할 수있는 방법이 없습니다.MySQL의 행 복사
예를 들어, 기본 키를 제외하고 행의 모든 열을 새 행에 복사하려고합니다.
모든 필드가 포함 된 쿼리를 작성하지 않고도이를 수행 할 수 있습니까?
행의 모든 열을 복사하려고하지만 모든 열을 지정할 필요는 없습니다. http://dev.mysql.com/doc/refman/5.1/en/insert-select.html에서 구문을 알고 있지만 열을 무시할 수있는 방법이 없습니다.MySQL의 행 복사
예를 들어, 기본 키를 제외하고 행의 모든 열을 새 행에 복사하려고합니다.
모든 필드가 포함 된 쿼리를 작성하지 않고도이를 수행 할 수 있습니까?
모두 선택하지 않을 경우 선택하려는 열을 나열해야합니다. 복사/붙여 넣기는 친구입니다.
열을 지정하지 않으면 항목을 순서대로 유지해야합니다. 예를 들어 :
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...
:
처럼 한 번에 열을 작성하십시오.
아니요, 불가능합니다.
하지만 열 목록을 얻을 당신이이 과정도 등 코드
내가 겠지 통해 수행 할 수 있습니다 복사 된 원하지 않는 한 쉽게 삭제할 당신은 기본 키를 생략 할부터 auto_increment
컬럼이며, MySQL이 시퀀스의 다음 값을 자동 생성하도록합니다. '널 (MYTABLE에
삽입 :
는 다음 싱글/멀티 레코드 삽입에 대한 작동에 ... 방법에서 선택 삽입을 통해 대량 삽입 작업을 수행 할 필요가 없습니다 가정, 점을 감안 a ','b ','c ');여기서 첫 번째 열은 auto_incremented
기본 키이고 다른 열은 테이블의 다른 열입니다. MySQL이 auto_incremented
컬럼에 대해 null (또는 0)을 발견하면 null을 자동으로 다음 유효한 값으로 바꿉니다 (자세한 내용은 this link 참조). 이 링크는 설명 된 NO_AUTO_VALUE_ON_ZERO
SQL 모드를 비활성화하여이 기능을 비활성화 할 수 있습니다.
궁금한 점이 있으면 알려주세요.
-Dipin
당신의 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; 문장 다음에 :)
이것은 내가 작성한 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());
테이블을 새로운 것으로 복사 한 다음 원하지 않는 컬럼을 삭제하십시오. 단순한.
필자가 알고있는 한, 그 방법으로 삽입 할 수있는 행의 수는 MySQL 패킷 크기입니다. –
알아 둘만한; 덕분에 Dominic –