ON DUPLICATE KEY를 사용하여 삽입하려는 모든 것을 업데이트하는 방법이 있습니까?
ON DUPLICATE KEY UPDATE
해당 키에 대한 레코드가 이미있는 경우 특정 값을 업데이트하는 데 사용할 수 있다는 것을 알고 있습니다 .
나는 이것을 할 수있다 :
INSERT INTO `tableName` (`a`,`b`,`c`) VALUES (1, 2, 3)
ON DUPLICATE KEY UPDATE `a`=1, `b`=2, `c`=3
그러나 열과 값을 두 번 쓰지 않고 어떻게 할 수 있습니까?
값을 반복하지 않아도 중간에 도달 할 수 있습니다.
INSERT INTO `tableName` (`a`,`b`,`c`) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE `a`=VALUES(`a`), `b`=VALUES(`b`), `c`=VALUES(`c`);
그러나 여전히 열을 나열해야합니다.
사용하다 REPLACE INTO
의 의미는 REPLACE INTO
새 레코드가 새 키 값을 제공하면 새 레코드로 삽입된다는 것입니다.
새 레코드에 기존 레코드와 일치하는 키 값이있는 경우 키 위반이 무시되고 새 레코드가 기존 레코드를 대체 합니다.
유용하다면 버전> = 5.0에 대해 "중복"쿼리의 마지막 부분을 직접 작성하지 않도록 쿼리를 작성했습니다.
SELECT GROUP_CONCAT( CONCAT(COLUMN_NAME,"=values(", COLUMN_NAME,")") SEPARATOR ", ") FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'table_name';
출력은 다음과 같습니다.
a=values(a), b=values(b), c=values(c), d=values(d)
a, b, c 및 d 열이있는 테이블에서 쿼리의 첫 번째 부분에 추가 할 수 있습니다.
INSERT INTO `tableName` (`a`,`b`,`c`, `d`) VALUES (1,2,3,4) ON DUPLICATE KEY UPDATE a=values(a), b=values(b), c=values(c), d=values(d)
업데이트 : 매우 긴 열 목록의 경우 잘린 출력이 표시 될 수 있습니다. 위의 쿼리 앞에 다음 문을 사용할 수 있습니다 ( Uncle iroh에게 감사드립니다 ).
SET SESSION group_concat_max_len = 1000000;
나는 이것이 오래된 질문이라는 것을 알고 있으며 이것은 다소 틀에 얽매이지 않는 대답이지만 같은 문제가 발생하여 다른 답변에서 언급 된 group_concat_max_len 속성을 설정하는 데 문제가 있었고 항상 잘린 결과를 얻었습니다. 긴 스크립트를 작성할 때 궁극적으로 사용한 또 다른 옵션은이 수식을 Excel에서 사용하는 것입니다.
=SUBSTITUTE(TRIM(A1), ",", "") & " = VALUES(" & SUBSTITUTE(TRIM(A1), ",", "") & "),"
여기서 A1은 필드 이름을 복사 할 셀입니다. 이 작업을 빠르게 수행하려면 테이블을 마우스 오른쪽 단추로 클릭하고 모든 열 이름을 제공하는 클립 보드에 select 문을 복사합니다. 수식은 쉼표를 제거합니다.
이것이 누군가를 돕기를 바랍니다!
'Development Tip' 카테고리의 다른 글
Python의 표준 라이브러리에 정렬 된 컨테이너가없는 이유는 무엇입니까? (0) | 2020.11.07 |
---|---|
스칼라에서 param : _ *는 무엇을 의미합니까? (0) | 2020.11.07 |
SQL 쿼리 결과가 임시 테이블에 삽입되는 방법은 무엇입니까? (0) | 2020.11.07 |
툴바 탐색 햄버거 아이콘 누락 (0) | 2020.11.07 |
재정의 된 가상 메서드의 '기본 구현'을 어떻게 호출 할 수 있습니까? (0) | 2020.11.07 |